항해 99클럽 코테

99클럽 코테 스터디 6일차 TIL

metamong-data 2024. 11. 2. 22:19
728x90
반응형

오늘의 학습 키워드

해시

과제

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

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

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

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

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

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

입력

첫 번째 줄에 펼쳐진 카드의 개수 N$N$이 주어집니다.

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

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

S$S$는 STRAWBERRY, BANANA, LIME, PLUM 중 하나입니다.

출력

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

풀이 과정

  1. 입력할 문자 갯수를 처음에 숫자로 input을 받고 for문으로 반복
  2. “BANANA 5”와 같은 형식으로 들어 온다고 했으므로 앞에 카드 이름과 숫자를 일단 분리 한다
  3. dict에서 카드 이름에 숫자를 계속 더 해준다
  4. dict에 value에 5개가 있는지 확인 후 있을 경우 “YES” 없을 경우 “NO” 출력

제출 코드 (python)

num = int(input())
game = {
    'STRAWBERRY' : 0,
    'BANANA' : 0,
    'LIME' : 0,
    'PLUM' : 0
}

for i in range(num) :
    fruit, count = input().split()
    game[fruit] += int(count)

check = 5 in game.values()	# 5개 있는지 확인

if check : print('YES')
else : print('NO')

다른 언어로 문제 풀기

GO 언어

package main

import (
    "fmt"
)

func main() {
    var num int
    fmt.Scan(&num)
    
    game := map[string]int{
        "STRAWBERRY": 0,
        "BANANA":    0,
        "LIME":      0,
        "PLUM":      0,
    }
    
    for i := 0; i < num; i++ {
        var fruit string
        var count int
        fmt.Scan(&fruit, &count)
        game[fruit] += count
    }
    
    check := false
    for _, value := range game {
        if value >= 5 {
            check = true
            break
        }
    }
    
    if check {
        fmt.Println("YES")
    } else {
        fmt.Println("NO")
    }
}

C++

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main() {
    int num;
    cin >> num;
    
    map<string, int> game = {
        {"STRAWBERRY", 0},
        {"BANANA", 0},
        {"LIME", 0},
        {"PLUM", 0}
    };
    
    for(int i = 0; i < num; i++) {
        string fruit;
        int count;
        cin >> fruit >> count;
        game[fruit] += count;
    }
    
    bool check = false;
    for(const auto& pair : game) {
        if(pair.second >= 5) {
            check = true;
            break;
        }
    }
    
    cout << (check ? "YES" : "NO") << endl;
    
    return 0;
}

오늘의 회고

  • 비슷한 문제를 풀다 보니 이해도 되고 유형도 알게 된다!

출처 : https://www.acmicpc.net/problem/27160

 

728x90