백준 1159번
https://www.acmicpc.net/problem/1159
상근이는 내일 경기에 나설 선발 명단을 작성해야 한다.
국가대표팀의 감독이 된 이후에 상근이는 매우 게을러졌다. 그는 선수의 이름을 기억하지 못하고, 각 선수의 능력도 알지 못한다. 따라서, 누가 선발인지 기억하기 쉽게 하기 위해 성의 첫 글자가 같은 선수 5명을 선발하려고 한다. 만약, 성의 첫 글자가 같은 선수가 5명보다 적다면, 상근이는 내일 있을 친선 경기를 기권하려고 한다.
상근이는 내일 경기를 위해 뽑을 수 있는 성의 첫 글자를 모두 구해보려고 한다.
첫째 줄에 선수의 수 N (1 ≤ N ≤ 150)이 주어진다. 다음 N개 줄에는 각 선수의 성이 주어진다. (성은 알파벳 소문자로만 이루어져 있고, 최대 30글자이다)
상근이가 선수 다섯 명을 선발할 수 없는 경우에는 "PREDAJA" (따옴표 없이)를 출력한다. PREDAJA는 크로아티아어로 항복을 의미한다. 선발할 수 있는 경우에는 가능한 성의 첫 글자를 사전순으로 공백없이 모두 출력한다.
18
babic
keksic
boric
bukic
sarmic
balic
kruzic
hrenovkic
beslic
boksic
krafnic
pecivic
klavirkovic
kukumaric
sunkic
kolacic
kovacic
prijestolonasljednikovi
6
michael
jordan
lebron
james
kobe
bryant
bk
PREDAJA
문제는 풀이는 엄청 간단하다.
그냥 이름의 첫 글자만 따서 숫자를 파악하면된다.
while(N --> 0) {
String str = br.readLine();
char ch = str.charAt(0);
map.put(ch, map.getOrDefault(ch, 0) + 1);
}
들어오는 각 이름들의 첫 글자를 ch
에 저장하고, map
에 put()할 때 key는 각 이름의 첫 글자인 ch
로 하고 value는 getOrDefault 함수를 써서 들어오는 갯수에 따라 1씩 증가하도록 만들었습니다.
이렇게 하면 각 알파벳이 몇개 씩있는지 알 수 있게 됩니다.
Iterator<Entry<Character, Integer>> it = map.entrySet().iterator();
while(it.hasNext()) {
Entry<Character, Integer> entrySet = (Entry<Character, Integer>)it.next();
if(entrySet.getValue() >= 5) {
sb.append(entrySet.getKey());
}
}
Iterator를 EntrySet형으로 만들어서 map
을 전체탐색 할 수 있도록 했습니다.
entrySet
에서 value가 5이상인 값을 골라내면 첫글자가 같은 선수가 5명 이상인 알파벳을 얻을 수 있습니다.
상근이는 어떻게 국대감독이 되었을까
import java.io.*; import java.util.Map.Entry; import java.util.*; public class Main { public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int N = Integer.parseInt(br.readLine()); HashMap<Character, Integer> map = new HashMap<>(); while(N --> 0) { String str = br.readLine(); char ch = str.charAt(0); map.put(ch, map.getOrDefault(ch, 0) + 1); } Iterator<Entry<Character, Integer>> it = map.entrySet().iterator(); while(it.hasNext()) { Entry<Character, Integer> entrySet = (Entry<Character, Integer>)it.next(); if(entrySet.getValue() >= 5) { sb.append(entrySet.getKey()); } } if(sb.length() == 0) { System.out.println("PREDAJA"); } else { System.out.println(sb); } } // End of main } // End of class