반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

배움과 기록의 장

[백준] 1157번: 단어 공부 (Java) 본문

problem solving

[백준] 1157번: 단어 공부 (Java)

chaeunii 2023. 3. 9. 17:52

✅ 문제

https://www.acmicpc.net/problem/1157

 

✅ 풀이

  • 입력은 대소문자로 된 단어로 받고, 출력은 대문자로 하기때문에 우선 입력받은 단어를 대문자로 바꿔준다. 이때 사용해준 메서드는 문자열.toUpperCase() 이다.
  • 그 다음은 가장 많이 사용된 알파벳을 알기 위해 단어에 사용된 A~Z의 갯수를 알아야한다. 사용된 A~Z의 갯수를 담을, 크기 26 초기값이 0인 int 배열(alphabet)을 선언해준다. 
  • 단어를 순회하며 사용된 알파벳에 해당하는 배열의 요소에 +1을 해줄 것이다. 사용된 알파벳에 해당하는 배열의 인덱스를 찾을 때, 아스키코드를 사용해줄 것이다.
  •  

https://www.lookuptables.com/text/ascii-table

  • 우리가 만든 배열(alphabet)은 0~25의 인덱스를 가진다. 표를 보면 A~Z가 65~90에 해당한다는 것을 알 수 있다. 
    따라서, 우리가 만든 배열에서 각 알파벳(A~Z)의 인덱스 값은, '알파벳'-65를 해서 치환해주면 된다.
  • 사용된 A~Z의 갯수를 모두 구했다면, 갯수를 담은 배열(alphabet)을 순회하며 최댓값(max)과 그 최댓값을 가진 인덱스(maxIdx)를 구해준다.
  • 이후에 또 한번 갯수를 담은 배열(alphabet)을 순회하며 최댓값이 여러개 존재하는지 확인한다.
    여러개 존재한다면 '?'를 출력, 유일하다면 '(char) (maxIdx+65)'을 해주어 가장 많이 사용된 알파벳을 출력한다. 

 

✅ 코드

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);

        //대문자로 입력받기
        String line = sc.nextLine().toUpperCase();
        int[] alphabet = new int[26];
        
        //알파벳 배열에 횟수만큼 넣어주기
        for(int i = 0; i < line.length(); i++){
            alphabet[line.charAt(i)-65] += 1;
        }
        
        //max와 maxIdx 찾기
        int max = 0;
        int maxIdx = 0;
        for(int i = 0; i < alphabet.length; i++){
            if(alphabet[i] > max){
                max = alphabet[i];
                maxIdx = i;
            }
        }
        
        //max가 여러개 존재하는지 아닌지 판별하기
        int count = 0;
        boolean check = true;
        for(int i = 0; i < alphabet.length; i++){
            if(alphabet[i] == max){
                count ++;
                if(count >= 2) {
                    System.out.print("?");
                    check = false;
                    break;
                }
            }
        }

        if (check) System.out.print((char) (maxIdx+65));



    }
}

 

반응형