1 분 소요

문제 설명

프로그래머스 181902번 문자 개수 세기

알파벳 대소문자로만 이루어진 문자열 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_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

예제 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 합니다.

코드 구현

Python

def solution(my_string):
    answer = []

    for i in range(65, 91):
        count = 0
        for string in my_string:
            if string == chr(i):
                count += 1
        answer.append(count)

    for i in range(97, 123):
        count = 0
        for string in my_string:
            if string == chr(i):
                count += 1
        answer.append(count)

    return answer

Java

class Solution {
    public String solution(int q, int r, String code) {
        StringBuilder answer = new StringBuilder();

        for (int i = 0; i < code.length(); i += 1) {
            if (i % q == r) {
                answer.append(code.charAt(i));
            }
        }

        return answer.toString();
    }
}

개선할 점 - Python

  • 아래와 같은 방법을 통해 연산 횟수를 줄일 수 있다.
def solution(my_string):
    result = [0] * 52
    for char in my_string:
        if char.isupper():
            result[ord(char)-65] += 1
        else:
            result[ord(char)-97+26] += 1
    return result