
1차 풀이 과정
1. Scanner로 문자열 입력
2. 각 문자와 개수를 저장할 Map 선언
3. Map에 대문자, 문자열로 변환한 값을 개수와 함께 저장
4. 최빈값 반환
5. 각 value값과 최빈값을 비교
5. 만약 이미 결과값으로 저장된 문자가 있다면 최빈 문자가 2개 이상인 걸로 판단하고 ?
출력
package baekjoon;
import java.util.*;
public class B1157 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
Map<String, Integer> map = new HashMap<>();
// toUpperCase
// Map에 알파벳, 수량 입력
for(int i = 0; i < input.length(); i++){
// map.merge : key값이 존재하지 않으면 1, 존재하면 value+1 연산하여 put
// charAt -> touppercase 가능
map.merge(String.valueOf(input.charAt(i)).toUpperCase(), 1, Integer::sum);
}
//최대값 출력
int max = Collections.max(map.values());
//최빈 문자를 찾기 위해 entrySet 사용
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
String result = "";
// 최빈값과 entrySet의 value 비교
for(Map.Entry<String, Integer> entry : entrySet){
if(entry.getValue()==max){
if(!result.isEmpty()){
result = "?";
break;
}
result = entry.getKey();
}
}
System.out.println(result);
}
}
entrySet은 각 map의 key, value를 하나로 묶어서 set에 저장하는 방식이다.
entrySet을 사용하면 key와 value를 순서대로 각각 접근할 수 있다.
개선된 코드
튜터님의 코드 리뷰를 통해 불필요한 과정을 제거하는 리팩토링을 진행했다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine().toUpperCase();
// 문자, 개수를 map에 저장
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < input.length(); i++) {
// key값이 존재하지 않으면 1, 존재하면 value+1 put
map.merge(input.charAt(i), 1, Integer::sum);
}
//최빈값 반환
int max = Collections.max(map.values());
Character result = null;
// 최빈값과 entrySet의 value 비교
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
if (entry.getValue() == max) {
if (result != null) {
result = '?';
break;
}
result = entry.getKey();
}
}
System.out.println(result);
}
}
결과


'알고리즘 > 문제 풀이' 카테고리의 다른 글
[백준][Java] 브루트포스 (1) | 2025.04.02 |
---|---|
[프로그래머스][Java] 자연수 뒤집어 배열 만들기 (0) | 2025.03.17 |
[백준][Java] EOF(End of File) 처리하기 (0) | 2025.03.14 |
[백준][Java] 0 0이 입력될 때까지 연산 (0) | 2025.03.14 |
[Java, Python] 배열의 평균값 (0) | 2025.03.06 |