jyamethyst21 님의 블로그

백준 10808번- '알파벳 개수' (PYTHON 풀이) 본문

CODING 💻

백준 10808번- '알파벳 개수' (PYTHON 풀이)

jyamethyst21 2025. 12. 6. 00:06

문제:

 

문자열을 입력받고 각 문자에 해당하는 알파벳 자리의 수를 1 증가해서 최종적으로 카운트값 전체를 출력하는 문제이다.

이 문제를 보자마자 '딕셔너리를 활용해서 키, 값을 만들고 비교해서 1 증가하는 방법과 ord와 배열을 활용하는 방법' 이렇게 두가지가 떠올랐다. 그래서 두가지 전부하기로 했다!

 

풀이:

1) 딕셔너리 활용

dic = {'a' : 0, 'b' : 0, 'c' : 0,'d' : 0,'e' : 0,'f' : 0,'g' : 0,'h' : 0,'i' : 0,'j' : 0,'k' : 0,'l' : 0,'m' : 0,'n' : 0,'o' : 0,'p' : 0,'q' : 0,'r' : 0,'s' : 0,'t' : 0,'u' : 0,'v' : 0,'w' : 0,'x' : 0,'y' : 0,'z' : 0}
S = input()

for i in S:
    if i in dic:
        dic[i] += 1
print(*dic.values())

딕셔너리를 활용하면 다음과 같다.

알파벳 전부를 저장하는 딕셔너리를 만들고 값은 0으로 초기화해준다. 그리고 반복문을 통해 입력받는 문자열을 하나씩 비교해서 딕셔너리키에 해당한다면 해당 키의 값을 1 증가해주도록 한다. 이후 최종적으로 저장된 값을 출력하면 해결할 수 있다. 좀 더 직관적인 방법이다.

 

2) ord + 배열 활용

arr = [0] * 26
S = input()

for i in S:
    arr[ord(i) - 97] += 1

print(*arr)

arr에 0으로 초기화된 값을 26개 넣어준다. (알파벳이 총 26개이니까)

그 후 문자열을 입력받고 마찬가지로 반복문을 돌면서 각 자리에 해당하는 값을, ord 함수를 활용해서 유니코드로 변환한 뒤 a인 97을 뺀다. (ord는 각 문자를 유니코드로 바꿔주는 숫자이며, a = 97, b = 98 이다.) 여기서 97을 빼주는 이유는 첫번째 인덱스 값인 a의 값이기 때문이다. 97을 빼서 해당 수가 어느 자리에 위치해있는지 알기 위해서 이 작업이 필요하다. 그렇게 자리를 구한 다음 값을 1 증가해주라는 의미가 'arr[ord(i) - 97] += 1' 이다.

여기까지 하면 전체 자리를 전부 돌고 arr에는 각 자리에 해당하는 값들이 증가되어있을 것이다.

그 다음 이 배열을 바로 출력해주면 문제를 풀 수 있다.