알고리즘300 35

[백준] 2941.크로아티아 알파벳

2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net 예시를 잘 안보고 풀었더니, 입력값이 모두 크로아티아 알파벳으로만 이루어진 줄 알고 잘못 풀어 시간을 날렸다. '위 목록에 없는 알파벳은 한 글자씩 센다.' 이 문장을 빼먹으면 안된다! 항상 문제를 볼 때 끝까지 다 읽고 입출력 예시도 잘 살펴보자! # 2941 크로아티아 알파벳 # 어차피 크로아티아 알파벳 치환한 문자는 다 2개 이상으로 이루어져있으니 # 슬라이싱을 사용해 2개씩 묶어서 확인해보자. word = input(..

[백준] 5622. 다이얼

5622번: 다이얼 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다. www.acmicpc.net 이 문제는 가장 단순하게 풀었다. 풀고 나서 다른 파이썬 사용자들이 푼 걸 봤더니, 이중 for문을 사용해서 훨씬 길이가 짧고 깔끔하게 코드를 짜신 경우가 많았다.(bb) # 5622 다이얼 # 문자를 다이얼에 해당하는 숫자로 변경하고, # 숫자+1(1을 입력할 때 2초이므로)를 더해주면 되는 문제. # 어렵게 풀면 너무 힘들 것 같아서 가장 쉬운 방법으로 풀어보았다. word = input() sum = 0 for w in word: if w in ['A', 'B', 'C']: sum += 3 elif w in ['D', 'E', 'F']: s..

[백준] 2908. 상수

2908번: 상수 상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 www.acmicpc.net 이 문제는 두 수를 입력받으면 거꾸로 저장한 후 크기가 큰 쪽을 출력하는 문제였다. 파이썬 내장함수를 사용해서 문자열로 바꿔서 풀 수 있지만, 이번엔 10으로 나눠줘서 자리수를 구하고, 구한 자리수에 다시 10을 곱해 바꿔보았다. # 2908 상수 # 두 수를 입력받으면 거꾸로 읽은 후 크기가 큰 쪽을 답하는 상수의 대답을 출력해보자! # 파이썬 내장함수를 사용해서 문자열로 바꿔서 풀 수 있지만, # 이번엔 10으로 나눠줘서 자리수를 구하고, 구한 자리수에 다시 10을 곱해..

[백준] 1152. 단어의 개수

1152번: 단어의 개수 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열 www.acmicpc.net 파이썬의 split() 함수와 len() 함수, 두 가지만 알고 있으면 단 두 줄만으로 쉽게 풀 수 있는 문제이다. # 1152 단어의 개수 word = list(input().split()) print(len(word))

[백준] 1157. 단어 공부

1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 이 문제는 알파벳 대문자와 소문자 아스키 코드를 모두 활용해야 하는 문제였다. 이 부분만 알고 푼다면, 저번에 푼 10809번 알파벳 찾기 문제와 비슷하게 풀 수 있었다. #1157 단어 공부 # 우선, 대문자 A의 아스키코드는 65, 소문자 a의 아스키코드는 97이다. # 즉 대문자 아스키코드에 32를 더해주면 소문자가 되는 것이다. # 대, 소문자 상관 없이 가장 많이 사용되는 알파벳이므로 # 알파벳 언급 횟수를 셀 배열은 26개의 공간을 가진 한개의 리스트만 있으면 충분하다. arr = [..

[백준] 2675. 문자열 반복

2675번: 문자열 반복 문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다 www.acmicpc.net 파이썬 문자열에 +, -, * 같은 연산자가 사용 가능하다는 것만 안다면 어렵지 않게 풀 수 있는 문제였다. # 2675 문자열 반복 T = int(input()) for tc in range(1, T+1): num, word = input().split() num = int(num) P = '' for w in word: P += w * num print(P) P라는 문자열이 들어갈 변수를 생성하지 않고, 바로 반복문에서 그때그때 출력도 가능하다. 단..

[백준] 10809. 알파벳 찾기

10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출 www.acmicpc.net # 10809 알파벳 찾기 # 우선 알파벳 개수 만큼 -1을 채워 넣은 리스트를 만든다.(알파벳은 26개) # 이렇게 하면 -1이 아닌 숫자들은 자릿수가 채워진 것이고, 한번도 등장하지 않은 알파벳의 자리수는 -1로 남아있다. arr = [-1 for _ in range(26)] # 아스키 코드로 a는 97, z는 122이다. # 그래서 word를 반복문을 돌리며 해당 알파벳을 ord()를 사용해 아스키 숫자로 바꾼 후, # 거기서 97을 뺀 인덱스 ..

[백준] 11720. 숫자의 합

11720번: 숫자의 합 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. www.acmicpc.net # 11720 숫자의 합 N = int(input()) word = input() sum = 0 for i in word: sum += int(i) print(sum) 사용 언어가 파이썬이라 나는 잘 몰랐는데, java나 C로 푼 사람들의 해답을 보니 긴 문자열이 들어왔을 때 정수로 바꾸는 처리가 조금 까다로운 것 같다. 나중에 js로 알고리즘 풀게 되면 한번 확인해봐야 할 듯.

[백준] 11654. 아스키 코드

11654번: 아스키 코드 알파벳 소문자, 대문자, 숫자 0-9중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성하시오. www.acmicpc.net 이 문제는 파이썬 내장 함수를 알면 간단히 풀리는 문제이다. 파이썬에서 ASCII 코드를 숫자로 바꾸는 함수는 ord(), 역으로 숫자를 ASCII 코드로 바꾸는 함수는 chr()이다. # 11654 아스키 코드 # 파이썬에서 ASCII -> 숫자는 ord(), 숫자 -> ASCII는 chr() 함수를 사용한다! print(ord(input()))

[백준] 1065. 한수

1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 이 문제는 등차수열에 대해 다시 복습하고 푸니까 훨씬 잘 풀렸다. 우선 나는 이 문제를 한수인지 판별하는 함수를 만들어 카운트를 세는 방법으로 구현했다. 문제의 '한수 판별 함수'의 경우 3가지 포인트에 유의하며 접근했다. 포인트 1. 숫자가 1개만 있는 것도 수열이 성립한다(예: 1, 2, 3, 4...8, 9). 'an = a1 + (n-1)d' 이 식에 n=1을 대입해보면 성립한다는 것을 확인할 수 있다. 포인트 2. 10