Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

시간이 NullNull

[JAVA] [SWEA] 9778. 카드 게임 본문

알고리즘

[JAVA] [SWEA] 9778. 카드 게임

4NIng 2020. 5. 12. 21:57

카드 게임을 좋아하는 승현이는 요즘 블랙잭에 빠져 있다. 잘생긴 승현이와 함께 블랙잭의 규칙을 알아보자!

 

블랙잭을 처음 시작할 때, 덱에는 2, 3, 4, 5, 6, 7, 8, 9의 가치를 가지는 카드가 각각 4장,

11의 가치를 가지는 카드(Ace) 4장, 10의 가치를 가지는 카드 16장 (Ten, Jack, Queen, King), 총 52장의 카드가 올려져 있다.

 

지금 승현이는 이미 N장의 카드를 뽑아서 덱에는 52-N장의 카드가 남아 있으며, 승현이는 여기서 카드를 한 장 더 뽑을 지 말지 고민하고 있다.

 


승현이는 덱에 남아있는 카드 중 하나를 뽑았을 때,

"뽑은 모든 카드의 가치의 합이 21보다 크게 만드는 카드의 개수"가 "뽑았을 때 가치의 합을 21 이하로 만드는 카드의 개수"보다 크거나 같다면 게임을 그만 둘 것이다.

승현이가 뽑은 모든 카드의 가치가 주어질 때, 승현이가 게임을 그만 둬야 하는지 판단해주자!

 

 

 

로직은 간단하다

1. 전체 카드 수를 배열에 저장하고

2. 지금 뽑은 카드를 카드 수에서 빼주면서

3. 총 지금 뽑은 카드의 합이 몇인지를 계산하여

4. "뽑은 모든 카드의 가치의 합이 21보다 크게 만드는 카드의 개수"가 "뽑았을 때 가치의 합을 21 이하 인가 판단

5. 끝!

 

사실 너무 글을 안올려서 억지로 쉬운 문제 한 문제라도 풀어서 올린다 ㅠㅠㅠ

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Solution9778 {
	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 T = Integer.parseInt(br.readLine());
		for(int t=1; t<=T; ++t) {
			int n = Integer.parseInt(br.readLine());
			int totalCnt = 52 - n;
			int temp = 21;
			int[] cards  = {0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 16, 4};
			for(int i=0; i<n; ++i) {
				int num = Integer.parseInt(br.readLine());
				--cards[num];
				temp -= num;
			}
			String result = "GAZUA";
			if(temp <= 11){
				int cnt = 0;
				for(int i=2; i<=temp; ++i) {
					cnt += cards[i];
				}
				
				if(totalCnt - cnt >= cnt) {
					result = "STOP";
				}
			}
			bw.write("#"+t+" "+result+"\n");
		}
		bw.close();
		br.close();
	}
}

 

Comments