[Java] 백준 1159번 [농구 경기] 자바

: ) YOUNG·2022년 4월 10일
2

알고리즘

목록 보기
90/417
post-thumbnail

백준 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명 이상인 알파벳을 얻을 수 있습니다.



TMI

상근이는 어떻게 국대감독이 되었을까




코드


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

0개의 댓글