코딩테스트

[코딩테스트]백준 #1157

독학하는 정호빈 2022. 7. 11. 14:50

문제

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

입력

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

출력

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

코드

public class Main {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int max=0;
		char rs = '?';
		String a = sc.nextLine();
		int [] count= new int[91];
		a = a.toUpperCase();
		for(int i=0;i<a.length();i++) {
			count[a.charAt(i)]++;
		}
		for(int j=65;j<=90;j++) {
			if(max<count[j]) {
				max=count[j];
				rs = (char)j;
			}
			else if(max==count[j]) {
				rs='?';
			}
		}
		System.out.println(rs);
		
	}
}

해설

우선 모든 알파벳을 대문자로 바꾸어서 문제를 풀어나가는 것이 좋다고 판단하여 문자열을 모두 대문자로 바꾸어주는 메소드를 사용했다. 아스키코드로 대문자 알파벳은 65부터 90까지 있으므로 0부터 64까지의 배열 공간은 낭비가 되지만 직관적으로 이해하기 편하도록 65부터 90까지의 배열 공간을 만들어 어떤 알파벳이 나왔는지 카운트를 세어준다. 그중에 가장 많이 나온 알파벳을 rs으로 옮겨주며 동일한 카운트의 알파벳이 나오면 rs를?로 바꾼다. 여기서 중요한 점은 배열을 이용해 직관적으로 해당 알파벳이 몇 번 사용됐는지 판단하는 것이 주요 키포인트이다.

'코딩테스트' 카테고리의 다른 글

[코딩테스트]백준 #4673  (0) 2022.07.13
[코딩테스트]백준 #1152  (0) 2022.07.12
[코딩테스트]백준 #4344  (0) 2022.07.08
[코딩테스트]백준 #2490  (0) 2022.07.05
[코딩테스트]백준 #2753  (0) 2022.07.05