본문 바로가기

Study/BaekJoon

[백준 자바JAVA] 1157번 - 단어 공부

728x90

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

 

1157번: 단어 공부

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

www.acmicpc.net


● 문제

단어를 입력받고 해당 단어들의 알파벳의 아스키코드를 비교해 가장 많이 출력된 알파벳을 구하는 문제이다.


● 코드

import java.util.*;

public class Main {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		String aString = s.nextLine().toUpperCase();
		int cnt[] = new int[26];
		int max = 0;
		char result = 'c';
		
		int index;
		for(int i = 0; i < aString.length(); i++)
		{
			index = aString.charAt(i) - 65;
			cnt[index]++;
			
			if(max < cnt[index]) {
				max = cnt[index];
				result = aString.charAt(i);
			}
			else if(max == cnt[index])
				result = '?';
		}
		System.out.println(result);

		s.close();

	}

}

 

 

먼저 단어를 입력받은 뒤 toUpperCase()를 통해 단어들을 대문자로 바꿔준다.

이는 대문자와 소문자의 아스키코드가 달라 어차피 출력할때는 대문자로 출력하기때문에 모두 대문자로 바꿔 알파벳의 갯수를 카운팅 해준다.

 

다음으로는 입력받은 단어에서 65를 빼 index에 넣어준다.

아스키코드 대문자는 A(65)부터 이므로 65를 빼주게 된다면 0~25까지의 숫자가 나오게된다.

이를 이용하여 cnt배열에 넣어주어 갯수를 비교하게 된다.

 

이후에는 최댓값을 구하는 코드를 통해 result에 charAt을 이용하여 가장 많이 나온 단어를 넣어주게된다.

만약 max의 값과 cnt[index]의 값이 같을 경우 "?"를 출력하게 된다.


● 참고사항

- 아스키코드

728x90