티스토리 뷰

728x90
 

1157번: 단어 공부

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

www.acmicpc.net

문제

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

입력

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

출력

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

 

 

 

대문자인 경우와 소문자인 경우를 나눠서 생각할 수도 있지만, 이 문제는 대소문자를 구분하지 않으므로 문자열 입력 후 모든 알파벳을 대문자로 변경한다. 대문자로 변경하기 위해 toUpperCase() 메소드를 이용한다.

 

배열 사이즈가 알파벳 갯수와 같은 배열을 생성했는데, 이 배열에는 알파벳의 출현횟수를 저장한다. array[0]에는 'A'가 출현한 횟수를, array[25]에는 'Z'가 출현한 횟수를 저장하는 것이다. 문자열을 맨 앞부터 끝까지 탐색하며 배열의 값을 증가시킨다. 인덱스(0~25)와 알파벳의 유니코드를 대응시키기 위해 'A'를 마이너스한다. (13번째 줄)

 

19번째 줄은 가장 많이 출현한 알파벳을 찾는 for문이다. 배열의 값을 하나하나 탐색하며 큰 값을 max에 저장하면서 가장 큰 값을 찾으면 된다. 이 때 출현횟수가 같은 경우 ?를 출력해야 하는데, 이 경우를 구분하기 위해 max_index에 음수 값을 저장했다. 알파벳을 출력할 때 max_index 값이 음수인 경우 ?를 출력하고, 음수가 아닌 경우 알파벳을 출력하면 된다. 알파벳을 출력할 때 다시 'A'를 더해준다.

 

package baekjoon;
import java.util.Scanner;

public class B_1157 {
	public static void main(String[] args) {
		Scanner stdin = new Scanner(System.in);
		String str = stdin.next();
		stdin.close();
		str = str.toUpperCase(); // 모든 알파벳을 대문자로 전환
		
		int []array = new int[26]; // 알파벳 26개의 출현 갯수를 저장할 배열
		for(int i=0;i<str.length();i++) {
			int index = str.charAt(i)-'A'; // A가 array[0]에 대응할 수 있도록 'A'를 빼줌
			array[index]++; 
		}

		int max = 0; // 가장 큰 출현횟수를 저장
		int max_index = 0; // 가장 많이 출현한 알파벳의 인덱스
		for(int i=0;i<array.length;i++) {
			if(array[i] > max) { 
				max=array[i];
				max_index=i;
			}
			else if(array[i]==max && max!=0) { 
				max_index=-1; // 출현횟수가 같으면 max_index를 음수로 변경
			}
		}
		if(max_index<0) 
			System.out.println('?'); 
		else
			System.out.println((char)(max_index+'A'));
	}

}

 

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/10   »
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
글 보관함