Algorithm/Baekjoon

[Baekjoon] 백준 1157 단어공부 - java

담크 2021. 7. 12. 23:59

오늘은 문자열 문제인 단어 공부를 정리해보려 합니다.

요새 코테 문제중에 문자열 관련 문제들이 좀 보이더라고요

그래서 문자 열중에 좀 재밌어 보이는 문제를 가져와봤습니다.

문제는

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

 

1157번: 단어 공부

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

www.acmicpc.net

 

여기서 확인하시면 됩니다.


문제풀이

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int[] a = new int[26];
		String s = sc.nextLine().toUpperCase();
		int max = 0;
		char c = 'a';

		for(int i =0; i < s.length(); i++) {
			a[s.charAt(i) - 65]++;
			if (max < a[s.charAt(i) - 65]) {
				max = a[s.charAt(i) - 65];
				c = s.charAt(i);
			} else if(max == a[s.charAt(i) - 65]){
				c = '?';
			}
		}
		System.out.println(c);
    }
}

 

이번 문제의 핵심은 for문을 돌릴 때 어떤 문자의 출연 빈도수에 따라 인덱스의 값을 증가시켜 그 문자열을 출력해줘야 한다는 것입니다.

이때 출력은 대문자로 해야 되므로 일부러 toUpperCase()를 사용해서 문제를 풀었습니다.

먼저 알파벳은 26자이므로 int[26]을 사용해서 배열을 만든다

문자열 하나하나 개수를 비교해야 하므로 charAt을 사용해 String을 Char로 바꿔준다.

for문이 돌 때마다 a배열의 인덱스를 +1 해줘서 끝날 때까지 모든 문자를 비교하게 해 줍니다.

max라는 변수를 설정해 가장 많이 사용된 알파벳을 카운트해줍니다.

c는 문자열로 선언해주고 s.charAt(i)를 이용하여 가장 많이 사용된 알파벳을 추출합니다.

만약 max가 여러 개 존재할 경우는 ?를 출력해줍니다.