오늘의 학습 키워드
해시
과제
**《할리갈리》**는 단추가 달린 종 하나와 과일이 그려진 카드들로 구성된 보드게임입니다.
카드에는 총 4$4$종류의 과일이 최대 5$5$개까지 그려져 있습니다. 그려진 과일의 종류는 딸기, 바나나, 라임, 그리고 자두입니다.
게임을 시작할 때 플레이어들은 카드 뭉치를 공평하게 나눠가지며 자신이 가진 카드를 전부 소모하면 패배합니다.
게임은 시작 플레이어가 본인의 카드 뭉치에서 카드 한 장을 공개하는 것으로 시작합니다. 이후 반시계 방향으로 돌아가며 본인의 카드를 한 장씩 공개합니다.
펼쳐진 카드들 중 한 종류 이상의 과일이 정확히 5$5$개 있는 경우 종을 눌러야 하며 가장 먼저 종을 누른 플레이어가 모든 카드를 모아 자신의 카드 뭉치 아래에 놓습니다. 종을 잘못 누른 경우 다른 모든 플레이어에게 카드를 한 장씩 나누어줘야 합니다.
《할리갈리》를 처음 해보는 한별이는 할리갈리 고수인 히나에게 이기기 위해 여러분에게 도움을 청했습니다. 한별이를 도와 펼쳐진 카드들의 목록이 주어졌을 때, 한별이가 종을 쳐야 하는지 알려주세요.
입력
첫 번째 줄에 펼쳐진 카드의 개수 N$N$이 주어집니다.
두 번째 줄부터 N$N$개의 줄에 걸쳐 한 줄에 하나씩 펼쳐진 카드의 정보가 주어집니다.
카드의 정보는 공백으로 구분된, 과일의 종류를 나타내는 문자열 S$S$와 과일의 개수를 나타내는 양의 정수 X$X$로 이루어져 있습니다.
S$S$는 STRAWBERRY, BANANA, LIME, PLUM 중 하나입니다.
출력
한별이가 종을 쳐야 하면 YES을, 아니면 NO를 출력해주세요.
풀이 과정
- 입력할 문자 갯수를 처음에 숫자로 input을 받고 for문으로 반복
- “BANANA 5”와 같은 형식으로 들어 온다고 했으므로 앞에 카드 이름과 숫자를 일단 분리 한다
- dict에서 카드 이름에 숫자를 계속 더 해준다
- 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
'항해 99클럽 코테' 카테고리의 다른 글
99클럽 코테 스터디 8일차 TIL (4) | 2024.11.04 |
---|---|
99클럽 코테 스터디 7일차 TIL (3) | 2024.11.03 |
99클럽 코테 스터디 5일차 TIL (0) | 2024.11.01 |
99클럽 코테 스터디 4일차 TIL (1) | 2024.10.31 |
99클럽 코테 스터디 3일차 TIL (0) | 2024.10.30 |