[백준] 알파벳 개수 1918번 파이썬 Python 자료구조

Jeony·2021년 11월 23일
0

백준

목록 보기
14/25
post-thumbnail

📌생각해보기

  1. 알파벳이 나열되어 있는 문제는 아스키코드를 활용해서 풀면 좋다.

문자를 아스키코드로 변환
ord("a") -> 97
ord("b") -> 98
ord("A") -> 65
ord("B") -> 66

아스키코드를 문자로 변환
chr(97) -> "a"
chr(98) -> "b"
chr(65) -> "A"
chr(66) -> "B"

  1. 예제 출력에 기본값이 있는 경우에는 그 기본값으로 자리를 미리 만들어준다.
    1 1 0 0 1 0 0 0 0 1 1 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 -> 기본값 0

📌내가 작성한 코드

c = ord("a")
t = ord('z')
alphabet = []
count = 0

while c <= t :
    alphabet.append(chr(c))
    c += 1
    count += 1

answer = [0] * count

s = input()

for i in s:
    for j in range(len(alphabet)):
        if i == alphabet[j]:
            answer[j] += 1

print(*answer)

📌구글링 후 수정한 코드

s = input()

answer = [0] * 26

for i in s:
    answer[ord(i) - ord("a")] += 1

print(*answer)

📌풀이

  1. 먼저 값이 들어갈 자리와 기본값을 정해준다.
    알파벳은 26개니까 기본값 [0]과 곱해서 26개의 자리를 리스트로 만들어준다.
answer = [0] * 26

💡 알파벳의 개수를 구하는 코드를 쓸 수도 있다.

first = ord("a")
last = ord('z')
count = 0

while first <= last :
    first += 1
    count += 1
    
answer = [0] * count
  1. input으로 들어온 문자를 알파벳 순서 자리에 +1 해준다.
    i에 b가 들어왔을 경우, ord(i)는 98이고 ord("a")는 97이다.
    두 값을 빼기로 계산하면 1이 나온다.
    알파벳의 1자리에 +1을 하게된다.
    a: [0]
    b: [1]
    c: [2]
for i in s:
    answer[ord(i) - ord("a")] += 1
profile
알고리즘으로 문제를 해결하다가 포기함

0개의 댓글