Blog

B27160 할리갈리

날짜 2024-03-28
사용 언어 Java
문제 유형 자료 구조, 해시를 사용한 집합과 맵, 구현, 문자열
문제 URL https://www.acmicpc.net/problem/27160
시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
1 초 1024 MB 2287 1562 1342 70.299%

문제 #

문제 설명 #

**《할리갈리》**는 단추가 달린 종 하나와 과일이 그려진 카드들로 구성된 보드게임입니다.

카드에는 총 4$4$종류의 과일이 최대 5$5$개까지 그려져 있습니다. 그려진 과일의 종류는 딸기, 바나나, 라임, 그리고 자두입니다.

게임을 시작할 때 플레이어들은 카드 뭉치를 공평하게 나눠가지며 자신이 가진 카드를 전부 소모하면 패배합니다.

게임은 시작 플레이어가 본인의 카드 뭉치에서 카드 한 장을 공개하는 것으로 시작합니다. 이후 반시계 방향으로 돌아가며 본인의 카드를 한 장씩 공개합니다.

펼쳐진 카드들 중 한 종류 이상의 과일이 정확히 5$5$개 있는 경우 종을 눌러야 하며 가장 먼저 종을 누른 플레이어가 모든 카드를 모아 자신의 카드 뭉치 아래에 놓습니다. 종을 잘못 누른 경우 다른 모든 플레이어에게 카드를 한 장씩 나누어줘야 합니다.

《할리갈리》를 처음 해보는 한별이는 할리갈리 고수인 히나에게 이기기 위해 여러분에게 도움을 청했습니다. 한별이를 도와 펼쳐진 카드들의 목록이 주어졌을 때, 한별이가 종을 쳐야 하는지 알려주세요.

제한사항 #
  • 첫 번째 줄에 펼쳐진 카드의 개수 $N$이 주어집니다.

  • 두 번째 줄부터 $N$개의 줄에 걸쳐 한 줄에 하나씩 펼쳐진 카드의 정보가 주어집니다.

  • 카드의 정보는 공백으로 구분된, 과일의 종류를 나타내는 문자열 $S$와 과일의 개수를 나타내는 양의 정수 $X$로 이루어져 있습니다.

  • $S$는 STRAWBERRYBANANALIMEPLUM 중 하나입니다.

  • 한별이가 종을 쳐야 하면 YES을, 아니면 NO를 출력해주세요.

  •  $1 \le N \le 100,000$ 

  •  $1 \le X \le 5$ 

  • 입력으로 주어지는 모든 수는 정수입니다.


나의 풀이 #

import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.InputStreamReader;  
import java.io.OutputStreamWriter;  
import java.util.HashMap;  
import java.util.Map;  
import java.util.StringTokenizer;  
  
public class Main {  
    public static void main(String[] args) throws Exception {  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));  
  
        int count = Integer.parseInt(br.readLine());  
  
        // 과일 이름을 KEY, 개수를 VALUE 로사용  
        Map<String, Integer> fruitMap = new HashMap<>();  
  
        for (int i = 0; i<count; i++) {  
            StringTokenizer st = new StringTokenizer(br.readLine());  
            String fruitName = st.nextToken();  
            fruitMap.put(fruitName, fruitMap.getOrDefault(fruitName, 0) + Integer.parseInt(st.nextToken()));  
        }  
        br.close();  
  
        // Map에 값이 5인 경우가 있다면 YES        
        String isBell = fruitMap.containsValue(5) ? "YES" : "NO";  
        bw.write(isBell);  
  
        bw.close();  
    }  
}

실행결과

다른 사람의 풀이 #



관련개념 학습 #