[프로그래머스] LV.0 문자 개수 세기

윤인경·2023년 7월 24일
0

코딩테스트

목록 보기
7/38
post-thumbnail

문제 풀이에 사용한 개념

아스키 코드, 문자 변환

ord() -> 문자를 아스키 코드로 변환
chr() -> 아스키 코드를 문자로 변환

예)

print(chr(65))
print(ord('A'))
print(chr(97))
print(ord('b'))

출력 결과
A
65
a
98

0 리스트 생성

  • 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 함수를 작성해 주세요.

제한사항

  • 1 ≤ my_string의 길이 ≤ 1,000

입출력 예

my_stringresult
"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

  • 예제 1번의 my_string에서 'P'가 1개, 'a'가 1개, 'e'가 1개, 'g'가 1개, 'm'이 2개, 'o'가 1개, 'r'가 3개, 's'가 1개 있으므로 [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]를 return 합니다.

내가 작성한 코드

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에 개수가 몇개인지 세고 이를 리스트로 반환하여 결과를 낸다.
profile
코딩 공부 및 프로젝트 정리

1개의 댓글

comment-user-thumbnail
2023년 7월 24일

좋은 정보 감사합니다

답글 달기