티스토리 뷰

Q.1157 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

 

입력 :

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

 

출력 :

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

 

<소스 코드> 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Scanner;
 
public class Prac{
    public static void main(String[] argv){
        Scanner sc = new Scanner(System.in);
        int[] cnt = new int[26]; //알파벳 카운트를 저장할 int 배열
        int max = 0;             //가장 많이 나온 알파벳 수를 저장할 변수 (크기 비교에 사용)
        char answer = '?';       // 정답을 저장하는 변수
        
        String word = sc.next().toUpperCase();   //단어를 입력받고, 모든 문자를 대문자로 바꾼다.
        
        for(int i = 0; i < word.length(); i ++){ //문자열 길이 만큼 반복
            cnt[word.charAt(i)-65]++;            //현재 알파벳을 알파벳카운트 배열 index에 +1 한다.
            if(max < cnt[word.charAt(i)-65]){    //현재 알파벳 수가 max보다 크다면  
                answer = word.charAt(i);         //정답에 현재 알파벳을 할당.
                max = cnt[word.charAt(i)-65];    //max 변수에 현재 알파벳 수를 저장.
            }
            else if(max == cnt[word.charAt(i)-65])  //만약 현재 알파벳 수가 max와 같다면
                answer = '?'//정답에 '?'를 할당.
        }
        System.out.println(answer);    
    }
}
cs

 

<실행 결과>

 

<해법>

(1) for i = 0 부터 word의 길이까지

(2)     현재 알파벳 위치의 카운트 배열에 +1 한다.

(3)     if 현재 알파벳 카운트가 max보다 크다면

(4)         answer = 현재 알파벳

(5)         max = 현재 알파벳의 카운트 수

(6)    else if 현재 알파벳 카운트가 max와 같다면

(7)        answer = '?'

      위 과정을 문자열의 길이만큼 반복한다.

 

문제 사이트 및 참고 사이트 : https://www.acmicpc.net/problem/1157



본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.

댓글