코딩테스트

[BOJ_1157/JAVA] 단어공부

Eun 2021. 12. 11. 20:15

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

 

1157번: 단어 공부

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

www.acmicpc.net

문제

풀이

처음에 해당 문제를 풀었을 때 메모리초과가 나서 당황스러웠다 ;; 코테공부를 시작한지 얼마안돼서 메모리초과는 처음 보았기때문이다.

변수를 너무 많이 써서 메모리초과가 난 것 같았다.

따라서 구글링하여 다른사람들은 어떻게 풀었는지 힌트를 얻었다.

1. 입력값을 받을 때 소문자, 대문자 상관없이 알바벳개수를 세주어야하기때문에 처음부터 대문자로 변환해주었다.

2. 대문자를 아스키값으로 바꿔주기위해 65를 빼주고 배열에 값을 추가해주었다. (알파벳 개수 세는 과정)

3. for문을 돌면서 배열의 값이 가장 큰 원소를 가져오고 +65를 해주어 char형으로 바꾸어 result에 저장함.

4. 만약에 배열의 가장 큰 값을 또 만나게 된다면 알파벳 개수가 같다는 뜻이므로 result에 '?' 저장함.

5. result를 출력해주었다. 

 

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ1157 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String input = br.readLine().toUpperCase();		
		
		int [] alpha = new int[26];
		
		for(int i=0;i<input.length();i++) {	
			alpha[input.charAt(i)-65]++;	
		}

		
		int max=0;
		int index=0;
		char result = 0;
		
		for(int i=0;i<alpha.length;i++) {
			if(alpha[i]>max) {
				max=alpha[i];						
				index=i;
				result=(char) (index+65);
				
			}else if(max==alpha[i]) {			
				result='?';
			}
		}
		
		System.out.println(result);
	}
}

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

[BOJ_9012/JAVA] 괄호  (0) 2021.12.13
[BOJ_10845/JAVA] 큐  (0) 2021.12.11
[BOJ_2309/JAVA] 일곱 난쟁이  (0) 2021.12.07
[BOJ_1919/JAVA] 애너그램 만들기  (0) 2021.12.07
[BOJ_1673/JAVA] 치킨 쿠폰  (0) 2021.12.06