-
[Baekjoon Online Judge] 1157번: 단어 공부문제 풀이/Baekjoon Online Judge 2021. 1. 4. 21:53
[Baekjoon Online Judge] 1157번: 단어 공부
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
알파벳의 개수를 세고 가장 많은 알파벳을 대문자로 출력하는 문제이다. 개수가 같은 알파벳이 있으면 ?를 출력하도록 한다.
import java.io.*; import java.util.HashMap; import java.util.Map; public class Baekjoon1157 { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); String word = bufferedReader.readLine().toUpperCase(); // 대소문자 구분 x Map<Character, Integer> characterMap = new HashMap<>(); for (int i = 0; i < word.length(); i++) { Character character = word.charAt(i); if (characterMap.containsKey(character)) characterMap.put(character, characterMap.get(character) + 1); else characterMap.put(character, 1); } int max = 0; Character resultKey = null; for (Character key : characterMap.keySet()) { // 가장 자주 언급된 key 와 언급 횟수를 저장 if (max < characterMap.get(key)) { max = characterMap.get(key); resultKey = key; } } int count = 0; for (Character key : characterMap.keySet()) { // 중복되는 횟수를 count if (characterMap.get(key) == max) ++count; } if (count == 1) bufferedWriter.write(resultKey); // 언급된 횟수가 1번이면 가장 많이 언급되었다. else bufferedWriter.write('?'); // 1번 이상이면 ? 출력 bufferedWriter.flush(); bufferedReader.close(); bufferedWriter.close(); } }
간단하게 개수를 세어 Map에 저장하였고, 가장 큰 값은 max로 두었다. 출력하기 전 max 크기의 value를 가진 key의 개수를 count하고 해당 개수에 맞게 처리한다.
'문제 풀이 > Baekjoon Online Judge' 카테고리의 다른 글
[Baekjoon Online Judge] 11719번: 그대로 출력하기 2 (0) 2021.01.05 [Baekjoon Online Judge] 11721번: 열 개씩 끊어 출력하기 (0) 2021.01.04 [Baekjoon Online Judge] 10809번: 알파벳 찾기 (0) 2021.01.04 [Baekjoon Online Judge] 1152번: 단어의 개수 (0) 2021.01.04 [Baekjoon Online Judge] 8958번: OX퀴즈 (0) 2021.01.04