본문 바로가기

Algorithm/프로그래머스

[Python] [코딩 기초 트레이닝] / 문자 개수 세기

[문제 설명]

알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, 
my_string에서 'A'의 개수, my_string에서 'B'의 개수,..., my_string에서 'Z'의 개수, 
my_string에서 'a'의 개수, my_string에서 'b'의 개수,..., my_string에서 'z'의 개수를 
순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.



[제한사항]
1. 1 ≤ my_string의 길이 ≤ 1,000

 

def solution(my_string):
    answer = []
    return answer

 

 

- 다른 0단계 문제들은 보면 바로 알고리즘이 생각났는데, 이 문제는 처음 딱 봤을때 약간 당황함.

- 알파벳을 다 쪼개서 순서대로 정렬 (대문자 -> 소문자 순서)

 

 

 

[A] (내가 쓴 답)

def solution(my_string):

    answer = ['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', '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']

    return [my_string.count(i) for i in answer]

 

 

[A] 다른 답들

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

 

* ord() :  아스키코드 변환 함수

 

def solution(my_string):
    return [my_string.count(alphabet) for alphabet in 'abcdefghijklmnopqrstuvwxyz'.upper()+'abcdefghijklmnopqrstuvwxyz']
* 이 답들 외에도 기발한 답들이 많았지만 두개가 가장 직관적이었다.