본문 바로가기

프로그래머스(Java)/Level 0

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

728x90

 

코드 힌트

  • 아스키 코드란?
    • 컴퓨터는 문자를 숫자로 저장하고 처리합니다. 아스키(ASCII) 코드는 문자와 숫자를 일대일로 매핑한 표준 코드 체계입니다.
    • 각 문자는 고유한 정수 값으로 표현됩니다. 예를 들어, 대문자 'A'는 65, 소문자 'a'는 97의 아스키 코드 값을 갖습니다.
  • 문자열 순회
    • 문자열을 순회하면서 각 문자의 아스키 코드 값을 확인할 수 있습니다.
    • Java에서는 charAt() 메서드를 사용하여 각 문자의 위치에 따른 문자를 얻을 수 있습니다.
  • 대소문자 구분
    • 대문자와 소문자를 구분하여 처리해야 할 경우가 있습니다. 이를 위해 아스키 코드 값을 비교하여 구분할 수 있습니다.
    • 예를 들어, 'A'부터 'Z'까지의 문자는 아스키 코드 값이 65부터 90까지이며, 'a'부터 'z'까지는 97부터 122까지입니다.
  • 인덱스 계산
    • 문자열 내에서 문자의 출현 빈도를 세는 경우, 각 문자의 아스키 코드 값을 기준으로 인덱스를 계산하여 카운트할 수 있습니다.
    • 대문자의 경우 'A'를 기준으로 한 인덱스는 char - 'A'로 계산할 수 있습니다.
    • 소문자의 경우 'a'를 기준으로 한 인덱스는 char - 'a' + 26으로 계산할 수 있습니다.
  • 배열 활용
    • 위와 같은 방식으로 계산된 인덱스를 배열의 인덱스로 사용하여 각 문자의 출현 횟수를 카운트할 수 있습니다.
    • 이 방법은 문자열을 효율적으로 순회하면서 각 문자의 출현 빈도를 계산하는 데 유용합니다.

정답은 더보기 클릭

더보기
class Solution {
    public int[] solution(String my_string) {
        // 알파벳 대소문자를 모두 포함하는 배열을 생성합니다.
        // 인덱스 0~25: 대문자 'A'부터 'Z'까지
        // 인덱스 26~51: 소문자 'a'부터 'z'까지
        int[] result = new int[52];
        
        // 문자열을 순회하면서 각 문자의 출현 빈도를 기록합니다.
        for (int i = 0; i < my_string.length(); i++) {
            char ch = my_string.charAt(i);
            
            // 대문자인 경우
            if (ch >= 'A' && ch <= 'Z') {
                // 'A'를 기준으로 인덱스를 계산하여 result 배열에 카운트합니다.
                result[ch - 'A']++;
            } 
            // 소문자인 경우
            else if (ch >= 'a' && ch <= 'z') {
                // 'a'를 기준으로 인덱스를 계산하여 result 배열에 카운트합니다.
                result[ch - 'a' + 26]++;
            }
        }
        
        return result;
    }
}

 

 

조건문 간단하게 수정하기

class Solution {
    public int[] solution(String my_string) {
        int[] result = new int[52];  // 알파벳 대소문자를 모두 포함하는 배열 생성
        
        // 문자열을 순회하며 각 문자의 출현 빈도를 카운트
        for (int i = 0; i < my_string.length(); i++) {
            // 대문자인 경우
            if (my_string.charAt(i) < 'a') {
                result[my_string.charAt(i) - 'A']++;  // 'A'를 기준으로 인덱스 계산하여 카운트
            } 
            // 소문자인 경우
            else {
                result[my_string.charAt(i) - 'a' + 26]++;  // 'a'를 기준으로 인덱스 계산하여 카운트
            }
        }
        return result;  // 결과 배열 반환
    }
}

 

 

728x90