공부하기/백준

[Java] 백준 풀기 1159 - 농구 경기

XEV 2023. 6. 14. 23:50

자바 백준 1159번

브론즈 2

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

 

1159번: 농구 경기

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

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 구현, 문자열

 

 

 

 

 

문제 풀기

모든 이름을 입력받아 저장한다.

해시맵을 사용하여 이름의 첫 알파벳과 그 빈도수를 저장한다. 이때, getOrDefault() 를 사용하여 저장된 알파벳인 key 가 존재하면 기존의 value 에 1 을 누적하여 더하고 그렇지 않고 첫 알파벳 key 이면 0 + 1 을 저장한다.

모든 이름의 첫 알파벳을 HashMap 에 저장한 후 entrySet() 을 이용하여 key value 쌍을 for each 로 꺼내어 동일한 알파벳이 5 개 이상인지 확인하고 그에 대한 결과를 저장한다.

return 으로 받은 List 가 비었으면 "PREDAJA" 를 출력하고 그렇지 않으면 저장된 알파벳을 순차적으로 정렬하여 출력한다.

 

 

 

 

 

코드 보기

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.Collections;


public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine();  // 위 nextInt() 처리하고 남은 줄바꿈 문자를 소비하여 제거

        // 선수들 이름을 저장할 리스트
        List<String> playerList = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            String pName = sc.nextLine();  // 선수 이름을 하나씩 받음
            playerList.add(pName);  // 선수 하나씩 저장
        }

        // 첫 알파벳이 다섯개 이상인지 확인하는 메서드
        List<Character> output = findAlphabetWithFiveMore(playerList);

        // 반환 결과에 따른 출력
        if (output.isEmpty()) {
            System.out.print("PREDAJA");  // 반환 결과가 비었을때
        } else {
            Collections.sort(output);  // 알파벳 순으로 정렬
            for (char c : output) {
                System.out.print(c);  // 반환 결과 하나씩 출력
            }
        }
    }

    private static List<Character> findAlphabetWithFiveMore(List<String> playerList) {
        // 첫 알파벳과 그 개수를 저장할 해시맵
        Map<Character, Integer> countMap = new HashMap<>();

        // 선수 List 에서 이름 하나씩 꺼내어 첫 알파벳과 그 개수를 저장
        for (String pName : playerList) {
            char firstChar = pName.charAt(0);  // 이름의 첫 알파벳을 저장
            countMap.put(firstChar, countMap.getOrDefault(firstChar, 0) + 1);  // 이미 저장된 알파벳이 없거나 있는 경우에 따른 key value 지정
        }

        // return 시킬 결과 List 생성
        List<Character> output = new ArrayList<>();
        
        // 동일한 알파벳이 5개 이상인지 판단
        for (Map.Entry<Character, Integer> entry : countMap.entrySet()) {  // key value 쌍으로 하나씩 꺼냄
            if (entry.getValue() >= 5) {  // value 를 확인
                output.add(entry.getKey());  // 5 이상이면 key 저장
            }
        }

        return output;
    }
    
}