Baekjoon 문제 풀기 (10808번 : 알파벳 개수) Python

10808번 : 알파벳 개수

1. 문제읽기


count 함수 이용하기

아스키코드와 count 함수를 이용하면 편하다.

2. 제출 코드


비슷한 문제를 풀었던게 오히려 헷갈리게 만들었다.
count 함수와 find 함수가 비슷한 건줄 알고 계속 find 함수 써봐야지~ 하다가 헤멨다.
알고보니 find 함수는 index 함수와 비슷한거였다!
if문은 안써줘도 됐었는데..

그리고 list(range(97,123))은 또 못썼다.
이래서 계속 같은 방법으로만 푸는 구나 싶었다..

s = input()

arr = [chr(97+i) for i in range(26)]

for i in arr:
    search = s.count(i)
    if search >= 1:
        print(search, end=' ')
    else:
        print(0, end=' ')

3. 공부할 것


  • find 함수와 비슷한 index 함수가 리턴값이 없으면 오류를 출력하고, find 함수는 -1을 리턴한다.
  • count 함수는 전혀 상관없이 갯수를 세지 못하면 0을 리턴한다.

  • list함수와 range 함수는 같이 쓸 수 있다…

  • ord 함수
    • 다른 코드 풀이를 보니 ord 함수를 써서 푼 코드가 많았다.
    • 2번이나 블로그에 정리했었는데 완전 리셋되서 깜짝놀랐다.
    • chr 함수와 반대 개념!
s = input()

arr = [0]*26

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

print(*arr, sep=' ')

위와 같이 ord 함수를 써서 간단히 나타낼 수 있다.
for 문 안의 코드를 이해하는데 시간이 좀 걸렸는데, a가 아스키코드로 97, b가 98 … 이렇게 가니까 97을 각각 뺀다고 생각하면 a는 0번째, b는 1번째 … 이런식으로 arr의 인덱스와 같아진다.
그러면 결과적으로 ord(i)는 현재 문자의 숫자를 나타내주는 거고 거기서 -97을 하니까 arr의 인덱스 번호에 도달하게 되고, 1씩 더해줌으로써 카운트 함수와 동일하게 동작한다.
생각해보지못한 코드였는데 도움이 많이 되었다.

댓글남기기