프로그래밍/백준

[Java]백준 - 알파벳 개수 (10808번)

NYinJP 2023. 2. 7. 23:18
문제
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각 알파벳이 단어에 몇 개가 포함되어 있는지 구하라
입력
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며 모두 소문자로만 이루어져 있다.
출력
단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.

IDEA

알파벳 소문자의 아스키코드는 a부터 z까지 97~122으로 이루어져 있다.

a는 몇 개? b는 몇 개? 를 저장하여 출력해야 하기 때문에 

a부터 z까지의 문자열에 포함된 각 개수를 저장하는 배열(크기 26)을 생각했다.

아스키코드와 달리 a의 인덱스 번호는 0번 부터 시작해야 한다. 

따라서 97을 빼서 0~25번 인덱스를 갖는 알파벳 배열을 만들어준 다음에 

배열의 각 인덱스에 해당되는 요소들을 1 씩 더해주었다.

(말이 잘 와닿지 않지만 그냥 계속 갱신해줬다는 얘기)  

 

출력할 때도 반복문을 통해 출력해주었다. 

 

CODE

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc= new Scanner(System.in);
        String str= sc.nextLine(); //97~122
        int [] asciiAlphabet= new int [26];
        for(int i=0;i<str.length();i++){
            // 알파벳 배열에 값 추가
            asciiAlphabet[(int)str.charAt(i)-97]=asciiAlphabet[(int)str.charAt(i)-97]+1;
        }
        for(int i=0;i<asciiAlphabet.length;i++) {
            System.out.print(asciiAlphabet[i]);
            System.out.print(" ");
        }
    }
}

 

ERROR

int [] asciiAlphabet= new int [26];

알파벳의 개수는 총 26개이다.

또한 반복문에서 길이-1만큼 돈다고 25로 저장하면 안 된다..!  ㅜ ㅜ 

바보 같은 실수를 해버렸다. 

또한, 배열은 생성과 동시에 자동적으로 기본값 0으로 초기화된다.

 

변수의 타입에 따른 기본값

자료형 기본값
boolean false
char '\u0000'
byte, short, int 0
long 0.0L
float 0.0f
double 0.0d 혹은 0.0
참조형 null