코딩테스트/백준
[백준 - 1157] 단어 공부. java
머밍
2025. 4. 1. 00:33
- 입력되는 단어 길이 1,000,000 -> 버퍼드 리더
- 대문자로 출력되어야하기 때문에 문자열을 대문자로 바꾸고 대문자 기준으로 개수 새기
- 개수 배열을 순회하며 최댓값이 두번 나왔을때 즉, 가장 많이 사용된 알파벳이 여러 개면 ?으로 바꾼
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static int[] getAlphabetCount(String str){
int[] counts = new int[26];
for(int i = 0; i<str.length(); i++){
counts[str.charAt(i) - 'A']++;
}
return counts;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str1 = br.readLine();
int[] s1 = getAlphabetCount(str1.toUpperCase());
Character answer ='?';
int max = 0;
for(int i = 0; i<26; i++){
if(s1[i] > max){
max = s1[i];
answer = (char)('A'+i);
} else if(s1[i] == max){
answer = '?';
}
}
System.out.println(answer);
}
}
다른 풀이
함수 부분이 다르다
for문으로 알파벳 전체를 순회하며 알파벳마다 문자열에 몇개 들어있는지를 구하는 함수를 사용
그렇게 얻은 카운트값을 이용하는 점이 다르다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static int getAlphabetCount(String str,char find){
int count = 0;
for(int i = 0; i<str.length(); i++){
if(str.charAt(i)==find) count++;
}
return count;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str1 = br.readLine().toUpperCase();
Character answer ='?';
int max = 0;
for(char c = 'A'; c <= 'Z'; c++){
int cnt = getAlphabetCount(str1,c);
if(max<cnt){
max = cnt;
answer = c;
} else if(max==cnt){
answer = '?';
}
}
System.out.println(answer);
}
}
배열을 잘 활용하거나 그때마다 검색하는 방법을 알았다