suheang

[백준] | JAVA, 자바 | 1159번 - 농구 경기 본문

알고리즘

[백준] | JAVA, 자바 | 1159번 - 농구 경기

suheang 2024. 4. 20. 22:43

https://www.acmicpc.net/problem/1159

 

1159번: 농구 경기

상근이는 농구의 세계에서 점차 영향력을 넓혀가고 있다. 처음에 그는 농구 경기를 좋아하는 사람이었다. 농구에 대한 열정은 그를 막을 수 없었고, 결국 상근이는 농구장을 청소하는 일을 시작

www.acmicpc.net


문제 요약 :

성의 첫 글자가 같은 선수 5명을 선발하려고 한다. 만약, 성의 첫 글자가 같은 선수가 5명보다 적다면, 상근이는 내일 있을 친선 경기를 기권하려고 한다.

상근이는 내일 경기를 위해 뽑을 수 있는 성의 첫 글자를 모두 구해보려고 한다.

 

( 선수 다섯 명을 선발할 수 없는 경우에는 "PREDAJA" (따옴표 없이)를 출력한다. PREDAJA는 크로아티아어로 항복을 의미한다. 선발할 수 있는 경우에는 가능한 성의 첫 글자를 사전순으로 공백없이 모두 출력 )


문제 풀이 :

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        Map<Character, Integer> nameCount = new HashMap<>();

        for (int i = 0; i < n; i++) {
            String player = br.readLine();
            char firstName = player.charAt(0);
            nameCount.put(firstName, nameCount.getOrDefault(firstName, 0) + 1);
        }

        ArrayList<Character> slectPlayer = new ArrayList<>();

        for (Map.Entry<Character, Integer> entry : nameCount.entrySet()) {
            if (entry.getValue() >= 5) {
                slectPlayer.add(entry.getKey());
            }
        }

        if (slectPlayer.isEmpty()) {
            System.out.println("PREDAJA");
        } else {
            Collections.sort(slectPlayer);
            for (Character c : slectPlayer) {
                System.out.print(c);
            }
            System.out.println();
        }
    }
}

 

1. 선수의 수 N 입력받기

2. 선수의 성의 첫 글자와 수를 저장할 Map nameCount 생성

3. 선수의 성을 입력받기

4. nameCount에 선수의 성의 첫 글자와 수를 저장

4 - 1. getOrDefault 메서드는 맵에서 특정 키에 대한 값을 조회하는 데 사용한다.

4 - 2. nameCount.getOrDefault(firstName,0) + 1은 nameCount 맵에서 firstName 키를 찾고 만약 맵에 존재하면 해당 값을 반환하고 +1을 해준다. 그렇지 않다면 0을 반환하고 +1을 해준다.

5. 성의 첫 글자가 같은 선수가 5명이 된다면 그 선수들의 성의 첫 글자를 저장할 ArrayList 를 생성한다.

6. 만약 slectPlayer가 비어있다면 "PREDAJA" 출력, 존재한다면 slectPlayer를 한번 정렬한 뒤 출력한다.