본문 바로가기
Baekjoon 자바 코드/심화1

[백준] 1157번 단어 공부 풀이 코드 (Java 자바)

by 망댕이 2024. 4. 30.
반응형

 

접근 방법)

이 문제는 몇 가지 순서를 밟아가며 풀어나가야 한다.

첫 번째로는 입력 값을 모두 toUpperCase()를 이용해 모두 대문자로 만들어준다.

두 번째로 알파벳 배열 [26]를 생성한 후 입력받은 문자열 길이만큼 for문을 반복한다.

for문 안에서는 입력값을 하나씩 알파벳 문자 - 'A'로 인덱스 번호로 바꿔준 후, 인덱스 번호에 맞는 배열에 값을 1씩 더해준다.

마지막으로 알파벳 배열 크기만큼 for문을 반복하여 배열 값이 가장 큰 값을 max로 잡고 max일 때 해당 알파벳을 출력하고, max가 같은 값이 존재할 경우 ?를 출력하게 작성한다.

 


 

정답 코드 1)

 

import java.util.Scanner;
   
class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str = sc.next().toUpperCase();
        
        int[] alphabet = new int[26]; // 알파벳 A~Z 까지 배열
        for(int i = 0; i < str.length(); i++){
            int num = str.charAt(i) - 'A'; // 알파벳에 맞는 인덱스 번호 생성
            alphabet[num]++; // num 번호에 해당하는 알파벳이 있을 때마다 1씩 추가
        }
        
        int max = 0; // 가장 많이 등장한 알파벳 횟수
        char answer = '?'; // 출력할 결과 값
        
        for(int j = 0; j < alphabet.length; j++){
            if(alphabet[j] > max){ // max일 때
                max = alphabet[j]; 
                answer = (char) (j+'A'); // max일 때 출력할 값도 answer에 저장
            }else if(alphabet[j] == max){ // max가 중복일 때
                answer = '?';
            }
        }
        System.out.print(answer);
        
    }
}

 

처음에는 입력받은 문자열 크기만큼 for문 하나로만 어떻게 해보려다가 실패하였다.

알파벳 A~Z의 배열을 이용해 알파벳이 등장한 횟수만큼 알파벳 배열에 담고, 이 알파벳 배열을 이용하여 문제를 풀 수 있다는 것을 알아내고 쉽게 문제가 풀렸다.

반응형