본문 바로가기
Algorithm/구현

[Python3] 백준 10808번 알파벳 개수

by HANNI하니 2022. 1. 27.

try 3 times / 난이도 : ★ (난이도는 제가 느끼는 매우 주관적인 난이도입니다.)

문제 확인

 

10808번: 알파벳 개수

단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.

www.acmicpc.net

코드 깃허브 확인

 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

정답 해설

lst = [0 0 ... 0] 0이 26개 있는 list의 각 원소들을 update해주는 형태

예) n이 'baekjoon'인 경우,

첫번째 for문에서 i는 'b'가 되어 lst[ord('b')-97] = lst[1]가 제대로 update된다.

n = input()
lst = [0]*26 #알파벳 a~z 총 26개. [0]을 총 26개로 초기화
#lst = [0 for _ in range(26)]


for i in n:
    lst[ord(i)-97] += 1
    #lst[ord(i)-ord('a)] += 1
    
for i in lst:
    print(i, end=' ')

 

공부한 내용

1.  아스키코드

ord(문자) = 숫자 ; 문자를 숫자로 바꿔주는 함수

ord('a') = 97 이기 때문에

ord('a')-97로 0으로 만들어서 lst와 index를 맞춰준다.

 

 

2.  다른 풀이 이해하기

아스키 코드를 활용하지 않은 경우 & count 활용한 경우

알파벳을 리스트로 나열한다.

n = list(str(input())
lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

for i in range(len(lst)):
	y = x.count(lst[i])
    print(y, end=' ')

count 활용한 경우

해당 문자가 있을 때 한 개씩 더하지않고, n 문자열에서 i번째 값을 모두 count한다.

n = input()
lst = [0]*26

for i in range(n):
	lst[ord(i)-97] = n.count(i)
for i in lst:
	print(i, end=" ")

 


레퍼런스

  • 아스키코드 설명
 

[Python] 파이썬 아스키코드(ASCII) 비교 및 변환 총정리 : ord(), chr(), hex()

파이썬에서 아스키코드를 문자로 변환하는 방법과 문자를 아스키코드로 변환하는 방법에 대해 알아봅니다. ord()함수를 사용하여 아스키코드로 변환할 수 있습니다. 반대로 chr()함수를 사용하여

ddolcat.tistory.com

 

댓글