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 |