ord() -> 문자를 아스키 코드로 변환
chr() -> 아스키 코드를 문자로 변환
예)
print(chr(65)) print(ord('A')) print(chr(97)) print(ord('b'))
출력 결과
A
65
a
98
- answer = [0] * 52
- answer = [0 for i in range(52)]
알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, my_string에서 'B'의 개수,..., my_string에서 'Z'의 개수, my_string에서 'a'의 개수, my_string에서 'b'의 개수,..., my_string에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.
my_string | result |
---|---|
"Programmers" | [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0] |
입출력 예 #1
def solution(my_string): answer = [0 for i in range(26*2)] for al in my_string: if al.isupper(): answer[ord(al)-65] += 1 else: answer[ord(al)-97+26] += 1 return answer
코드 간단 소개
- 0으로 구성된 대문자 26, 소문자 26개를 넣을 수 있는 리스트를 생성한다.
- my_string에 알파벳이 대문자인지 소문자인지 판단한다.
- 대문자라면 아스키 코드로 변환하여 -65를 하여 A를 0으로 순서대로 +1을 한다.
- 소문자라면 아스키 코드로 변환하여 -97을 하고 a와 A가 겹치면 안되기 때문에 +26을 한 index을 +1한다.
- my_string이 끝날 때까지 반복한다.
- 코드 1
def solution(my_string): answer=[0]*52 for x in my_string: if x.isupper(): answer[ord(x)-65]+=1 else: answer[ord(x)-71]+=1 return answer
내 풀이와 유사하다.
다른 점은 answer 0리스트를 만드는 방법과 lower일때 인덱싱 방법이다.
- 코드 2
def solution(my_string): return [my_string.count(alphabet) for alphabet in 'abcdefghijklmnopqrstuvwxyz'.upper()+'abcdefghijklmnopqrstuvwxyz']
처음부터 천천히 코드를 봐보자. 길기 때문에 끊어서 읽어야 보일 것 같다.
- my_string.count(alphabet) -> my_string에 있는 alphabet에 개수를 return한다.
- for alphabet in 'abcdefghijklmnopqrstuvwxyz'.upper()+'abcdefghijklmnopqrstuvwxyz' -> alphabet은 'abcdefghijklmnopqrstuvwxyz'의 대문자와 소문자를 이어 붙인 것을 for문으로 돈다.
- 따라서 전체적으로 이어서 보면 대문자와 소문자를 돌면서 my_string에 개수가 몇개인지 세고 이를 리스트로 반환하여 결과를 낸다.
좋은 정보 감사합니다