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

febCho·2024년 3월 8일
0

코딩테스트

목록 보기
51/253
post-thumbnail

문제

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

풀이

A~z까지의 개수를 세어야 한다고 했을 때 가장 먼저 떠오른 건 아스키 코드였다. 문제는 for문과 if ~ else if까지 작성했는데, 대체 answer[]에 어떻게 값을 넣어야 하는지를 모르겠는 거다. 역시 연산에 약하다 미쳐미쳐

초기화한 정수형 배열 int[] answer에는 모든 값들이 0으로 들어가 있을 테니, my_string에 포함된 문자에 해당하는 방에만 값을 + 해주면 된다(증감식 활용)는 생각이 들었고
자동으로 증가하는 i를 이용하기 위해 my_string.charAt(i)에서 가장 첫번째 문자인 A의 아스키코드를 빼주었다. 주의할 점은 A~Za~z로 길이가 52인 정수형 배열이 만들어진 것이기 때문에 소문자를 계산할 때는 97 - 26인 71을 빼주어야 한다는 점이다.

class Solution {
    public int[] solution(String my_string) {
        int[] answer = new int[52];
        
        for(int i=0;i<my_string.length();i++){
            if(my_string.charAt(i) >= 65 && my_string.charAt(i) <= 90){
                answer[my_string.charAt(i) - 65]++;
            }else if(my_string.charAt(i) >= 97 && my_string.charAt(i) <= 122){
                answer[my_string.charAt(i) - 71]++;
            }
        }
        return answer;
    }
}

결과

profile
Done is better than perfect.

0개의 댓글