[Bronze II] 할리갈리 - 27160
성능 요약
메모리: 211528 KB, 시간: 1108 ms
분류
자료 구조, 해시를 사용한 집합과 맵, 구현, 문자열
제출 일자
2024년 5월 30일 10:46:02
문제 설명
《할리갈리》는 단추가 달린 종 하나와 과일이 그려진 카드들로 구성된 보드게임입니다.
카드에는 총 4 종류의 과일이 최대 5개까지 그려져 있습니다. 그려진 과일의 종류는 딸기, 바나나, 라임, 그리고 자두입니다.
게임을 시작할 때 플레이어들은 카드 뭉치를 공평하게 나눠가지며 자신이 가진 카드를 전부 소모하면 패배합니다.
게임은 시작 플레이어가 본인의 카드 뭉치에서 카드 한 장을 공개하는 것으로 시작합니다. 이후 반시계 방향으로 돌아가며 본인의 카드를 한 장씩 공개합니다.
펼쳐진 카드들 중 한 종류 이상의 과일이 정확히 5
개 있는 경우 종을 눌러야 하며 가장 먼저 종을 누른 플레이어가 모든 카드를 모아 자신의 카드 뭉치 아래에 놓습니다. 종을 잘못 누른 경우 다른 모든 플레이어에게 카드를 한 장씩 나누어줘야 합니다.
《할리갈리》를 처음 해보는 한별이는 할리갈리 고수인 히나에게 이기기 위해 여러분에게 도움을 청했습니다. 한별이를 도와 펼쳐진 카드들의 목록이 주어졌을 때, 한별이가 종을 쳐야 하는지 알려주세요.
입력
첫 번째 줄에 펼쳐진 카드의 개수 N이 주어집니다.
두 번째 줄부터 N개의 줄에 걸쳐 한 줄에 하나씩 펼쳐진 카드의 정보가 주어집니다.
카드의 정보는 공백으로 구분된, 과일의 종류를 나타내는 문자열 S와 과일의 개수를 나타내는 양의 정수 X로 이루어져 있습니다.
S는 STRAWBERRY, BANANA, LIME, PLUM 중 하나입니다.
출력
한별이가 종을 쳐야 하면 YES을, 아니면 NO를 출력해주세요.
풀이
- 결과 : 성공
코드
package 할리갈리;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static Map<String, Integer> fruitFactory(){
/**
* 문제 설명 : 4종 과일의 총 합이 5개일 경우 YES 그렇지 않으면 NO
*
* 어려운 점 : 문제 설명을 이해하지 못함.
* - 원인 : 할리 갈리 게임 룰을 설명이 너무 장황함.
* - 결과 : 이해
* - 이해 방법 :
* - 불필요한 내용은 필터링함
* - 공책에 키워드만 정리하여 파악
* - `입력`, `출력`, `제한`, `예제입력`에 대해 중점적으로 파악함.
*
* 코드 해결법 :
* - 과일 이름은 항상 고정적이다라는 사실
* - 그 고정된 문자열 키에 따라 값이 바뀐다는 사실 => Key, Value 구조로 풀어야 하므로 HashMap자료구조 선택
* - fruits라는 HashMap타입의 변수를 첫 for loop 전에 객체를 생성하여줌.
* - scanner로 입력 받는 `과일 이름`과 `개수`를 바로 아래 코드로 연산하여 과일 개수를 증가시킴
* - fruits.put(fruitName, fruits.get(fruitName) + fruitNumber)`
* - scanner를 통해 입력이 종료 된 이후(과일 개수 연산 종료), 마지막 for loop에서는 fruits객체를
* 순회하면서 값이 `5`인 것을 찾아. `YES`, `NO`로 answer변수에 할당 하여 반환함
*/
// 접근1 : HASHMAP으로 풀기
Map<String, Integer> fruits = new HashMap<String, Integer>();
fruits.put("BANANA", 0);
fruits.put("PLUM", 0);
fruits.put("LIME", 0);
fruits.put("STRAWBERRY", 0);
return fruits;
}
public static void main(String[] args) {
String answer = "NO";
Scanner scanner = new Scanner(System.in);
int scNum = scanner.nextInt();
scanner.nextLine(); // 개행 문자 처리 / ** 중요 **
// 4종 과일의 총 합이 5개일 경우 YES 그렇지 않으면 NO
// 접근1 : HASHMAP으로 풀기
Map<String, Integer> fruits = fruitFactory();
for (int i = 1; i <= scNum; i++) {
String strRaw = scanner.nextLine();
String []strList = strRaw.split(" ");
String fruitName = strList[0];
int fruitNum = Integer.parseInt(strList[1]);
fruits.put(fruitName, fruits.get(fruitName)+fruitNum);
}
for(Map.Entry<String, Integer> entry : fruits.entrySet()){
if(entry.getValue() == 5 ) answer = "YES";
}
System.out.println(answer);
scanner.close();
}
}
'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글
[백준] 단어공부 - 1157번 (0) | 2024.05.30 |
---|---|
[백준] 상수 - 2908번 (0) | 2024.05.30 |
[백준] 단어의 개수 - 1152번 (0) | 2024.05.30 |
스택: 데이터를 차곡차곡 쌓기 (0) | 2021.11.29 |
🛩동적 배열이란? (0) | 2021.11.29 |