https://www.acmicpc.net/problem/1157
- 문제
- 문제 풀이
백준 1157번 단어 공부는 브론즈 1 난이도의 구현 및 문자열 문제이다. 이 문제에서는 문자열 1개가 주어진다. 그리고 이 문자열에서 가장 많이 사용된 알파벳을 출력하는 것이다. 이 문제에서 또 중요하게 알아야 할게 바로 대문자와 소문자를 구분하지 않는다는 것이고 답은 "?" 또는 대문자 알파벳으로 출력해야 한다는 것이다.
이 문제에서는 getOrDefault (Object Key, V defaultValue)라는 함수를 이용할 것이다. getOrDefault 함수는 찾는 키가 맵에 있으면 찾는 키의 값을 반환하고 없으면 기본 값을 반환하는 함수이다. 이 함수는 유용하게 사용할 수 있는 함수이기 때문에 꼭 알아두는 것이 좋다.
우선 문자열 s를 입력받고 s를 대문자로 변환시켜준다. 이것은 toUpperCase() 함수를 쓰면 된다. 알파벳이 몇 번 사용되었는지를 알아야 하니까 해쉬 맵을 사용 하도록 하겠다. 해쉬 맵은 키는 Character, 즉 알파벳으로 받을 거고 값은 Integer, 즉 횟수를 저장하는 데 사용하겠다. 그리고 가장 많이 사용된 알파벳이 2개 이상이면 ?를 출력해야 하니 리스트도 선언하겠다.
그다음에는 for-loop을 돌려 각 캐릭터를 받는다. 각 캐릭터를 char c라고 하겠다. 그리고 맵에 넣는데 키는 c가 되고 값은 이미 맵에 있으면 이미 있는 값 + 1, 없으면 기본 1로 맵에 저장한다. 그리고 가장 많이 사용된 알파벳에 횟수 max를 매번 확인하고 갱신해준다.
이렇게 모든 캐릭터를 마쳤으면 맵에서 가장 많이 사용된 알파벳들을 리스트에 추가해준다. 리스트에 추가하는 이유는 가장 많이 사용된 알파벳이 1개가 아니라 2개 이상일 수도 있기 때문이다.
리스트에 다 추가했으면 리스트의 사이즈가 2 이상이면 "?"를 출력해주고 사이즈가 1이면 리스트에 있는 알파벳 1개를 출력해주면 끝난다.
자세한 코드는 밑에 있는 코드를 참고하면 되겠다.
- 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
s = s.toUpperCase(); //문자열을 대문자로 변환
Map<Character, Integer> map = new HashMap<>(); //맵 선언
List<Character> list = new ArrayList<>(); //리스트 선언
int max = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
map.put(c, map.getOrDefault(c, 0) + 1); //맵에 이미 있으면 그 값을 +1, 없으면 1로 맵에 저장
max = Math.max(max, map.get(c));
}
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
if (entry.getValue() == max) list.add(entry.getKey()); //알파벳이 가장 많이 사용되었으면 리스트에 추가
}
if (list.size() > 1) {
System.out.print("?"); //리스트에 1개 이상 있으면 ? 출력
} else {
System.out.print(list.get(0)); //리스트에 1개만 있으면 그 알파벳 출력
}
}
}
'백준' 카테고리의 다른 글
[백준] 1065번 : 한수 – JAVA [자바] (0) | 2022.07.08 |
---|---|
[백준] 4673번 : 셀프 넘버 – JAVA [자바] (0) | 2022.07.08 |
[백준] 15596번 : 정수 N개의 합 – JAVA [자바] (0) | 2022.07.08 |
[백준] 2750번 : 수 정렬하기 – JAVA [자바] (0) | 2022.07.08 |
[백준] 2908번 : 상수 – JAVA [자바] (0) | 2022.07.08 |
댓글