문제 내용은 문자열을 입력으로 받아 대소문자 구분하지 않고, 가장 많이 사용된 알파벳을 출력해주면 되는데 가장 많이 사용된 알파벳이 2개 이상이라면 ?를 대신 출력한다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map.Entry;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
HashMap<Character, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char c = Character.toUpperCase(s.charAt(i));
map.put(c, map.getOrDefault(c, 0) + 1);
}
Integer max = Collections.max(map.values());
int maxCount = 0;
Character ans = null;
for (Entry<Character, Integer> entry : map.entrySet()) {
if (entry.getValue().equals(max)) {
ans = entry.getKey();
maxCount += 1;
}
if (maxCount > 1) {
System.out.println("?");
return;
}
}
System.out.println(ans);
}
}
문제를 풀어보자면, 문자열을 받아 한 글자씩 map에 넣어주면서 갯수를 파악한 뒤, 가장 많이 사용한 알파벳을 Map 꺼내 돌리면서 확인해주면 되는데 최대값이 여러개라면 2개 이상 나오는 순간 바로 for문을 종료해주는 것을 잊지 말자
그리고 놓치기 쉬운 부분인데 int가 아닌 Integer 갯수로 비교하고 있었다면 == 대신 .equals를 사용해줘야 에러를 막을 수 있다, 이후 최대값이 하나였다면, 최대값 알파벳을 출력해주면 끝이다.
Leave a Reply