반응형
백준 1157번 단어공부
https://www.acmicpc.net/problem/1157
문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
접근 방법 및 풀이
배열을 사용해도 되지만, HashMap의 getOrDefault
를 사용해서 풀이하였다.
getOrDefault 이란?
: 찾는 키가 존재한다면 찾는 키의 값을 카운팅하고 없다면 지정한 default 값을 반환하는 메서드
사용방법
getOrDefault(Object key, V DefaultValue)
key
: 값을 가져와야 하는 요소의 키.
defaultValue
: 지정된 키로 매핑된 값이 없는 경우 반환되어야 하는 기본 값.
HashMap의 경우, 동일 키 값을 추가할 경우 Value의 값이 덮어쓰기가 된다. 따라서 기존 key 값의 value를 계속 사용하고 싶을 경우 getOrDefault메서드를 사용하여 위의 예와 같이 사용할 수 있다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class Main {
static int max = 0;
public static void main(String[] args) throws IOException {
Map<Character, Integer> map = new HashMap<>();
char[] str = new BufferedReader(new InputStreamReader(System.in)).readLine().toUpperCase().toCharArray();
// toUpperCase() : 대문자 변환
for(char i : str) {
map.put(i, map.getOrDefault(i, 0) + 1);
if(max < map.get(i)) max = map.get(i);
}
int cnt = 0;
char ch = '?';
for(Entry<Character, Integer> tmpMap : map.entrySet()) {
if(tmpMap.getValue().equals(max)) {
cnt++;
ch = tmpMap.getKey();
}
}
System.out.print(cnt > 1 ? "?" : ch);
}
}
Reference
반응형