극동대학교\AI컴퓨터공학과\JAVA/프로그래머스 코딩 기초 트레이닝

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

sundori 2023. 7. 12. 15:08

목차

     

    #1 문자 개수 세시

    문제 설명

    알파벳 대소문자로만 이루어진 문자열 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번의 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 합니다.

    #2 코드 및 알고리즘

    class Solution {
        public int[] solution(String my_string) {
            int[] answer = new int[52];
            //answer[0~25] = 대문자, answer[26~51] = 소문자
            for(int i = 0; i < my_string.length(); i++){
                if(65 <= my_string.charAt(i) &&  my_string.charAt(i) <= 90){ // 대문자인 경우
                    answer[(int)(my_string.charAt(i))-65]++;
                } else { // 소문자인 경우
                    answer[(int)(my_string.charAt(i))-71]++;
                }
            }
            return answer;
        }
    }
    -------------------------------------------------
    정확성  테스트
    테스트 1 〉	통과 (0.02ms, 72.7MB)
    테스트 2 〉	통과 (0.02ms, 73.8MB)
    테스트 3 〉	통과 (0.03ms, 73MB)
    테스트 4 〉	통과 (0.02ms, 74.7MB)
    테스트 5 〉	통과 (0.04ms, 77.8MB)
    테스트 6 〉	통과 (0.03ms, 77.6MB)
    테스트 7 〉	통과 (0.06ms, 71.3MB)
    테스트 8 〉	통과 (0.03ms, 71.7MB)
    테스트 9 〉	통과 (0.03ms, 76.1MB)
    테스트 10 〉	통과 (0.08ms, 73MB)
    테스트 11 〉	통과 (0.09ms, 72.6MB)
    테스트 12 〉	통과 (0.11ms, 69MB)
    테스트 13 〉	통과 (0.16ms, 83.3MB)
    테스트 14 〉	통과 (0.14ms, 74.6MB)
    테스트 15 〉	통과 (0.12ms, 70.4MB)
    테스트 16 〉	통과 (0.16ms, 73.2MB)
    테스트 17 〉	통과 (0.13ms, 72.2MB)
    테스트 18 〉	통과 (0.12ms, 77.9MB)
    테스트 19 〉	통과 (0.03ms, 71.9MB)
    테스트 20 〉	통과 (0.02ms, 72.8MB)

    풀이:

    • 아스키코드에서 소문자는 97 ~ 122, 대문자는 65 ~ 90에 속한다.
    • for문을 통해 주어진 문자열의 길이만큼 반복하면서  대문자일 경우에 65를 빼며 소문자일 경우 71을 뺌으로서
    • 대문자는 0~25 사이의 인덱스에 저장하고 소문자는 26~51 사이의 인덱스에 저장하는 알고리즘이다.