본문 바로가기

코딩테스트

[JAVA-D3] SWEA 4047 - 영준이의 카드 카운팅

728x90
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

✅ 문제 요약

스페이드 다이아 하트 클로버 4 문양에 각각 1번부터 13번까지 총 52개의 카드가 있다고 하고

이것을 하나의 완성된 덱이라고 할 때

영준이가 현재 가지고있는 카드들이 입력으로 주어지고 완성된 덱을 만들기 위해 각 문양별로

필요한 카드 개수를 출력하라

 

🤔 문제 풀이

문양별로 4개의 크기가 14인 (1~13을 위한) 배열을 만들어주었다.

입력 문자열을 보면 (문양, 숫자첫째자리, 숫자둘째자리) 가 주어지는데

입력 문자열은 반드시 3의 배수 길이만큼 주어지기 때문에 반복문을 통해

각 카드 정보의 첫 시작점 i를 받고 info[i] = 무늬, info[i+1]은 숫자첫째자리, info[i+2]는 숫자 둘째자리로

입력 정보를 활용했다. 

숫자 같은 경우 반드시 두자리로 받으며 일의 자리 수 같은 경우에 숫자첫째자리가 0이 입력되므로

char형식으로 받은 뒤 StringBuilder에 넣고 int형으로 변환시켜 주었다. 

현재 가지고 있는 카드 무늬를 파악하고 해당 무늬 배열[카드숫자]의 값을 1 증가시켜주었다.

만약 이미 1인 경우에는 동일한 카드를 2장 가지고 있는 것이기 때문에 ERROR을 출력해주었다.

 

🚨CODE

import java.util.*;
import java.io.*;

public class Solution {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int testCase = Integer.parseInt(br.readLine());

		for (int t = 1; t <= testCase; t++) {
			char[] info = br.readLine().toCharArray();
			int[] s = new int[14];
			int[] d = new int[14];
			int[] h = new int[14];
			int[] c = new int[14];
			
			boolean isError = false;
			
			for(int i = 0; i<info.length; i+=3) {
				StringBuilder sb = new StringBuilder();
				char shape = info[i];
				sb.append(info[i+1]).append(info[i+2]);
				int num = Integer.parseInt(sb.toString());
				
				if(shape == 'S') {
					if(s[num] == 1) {
						isError = true;
						break;
					}
					s[num]++;
				}else if(shape == 'D') {
					if(d[num] == 1) {
						isError = true;
						break;
					}
					d[num]++;
				}else if(shape == 'H') {
					if(h[num] == 1) {
						isError = true;
						break;
					}
					h[num]++;
				}else {
					if(c[num] == 1) {
						isError = true;
						break;
					}
					c[num]++;
				}
			}
			
			if(isError) {
				bw.write(String.format("#%d ERROR\n", t));
			}else {
				int scount = 13; int dcount = 13; int hcount = 13; int ccount = 13;
				for(int i = 1; i<=13; i++) {
					scount -= s[i];
					dcount -= d[i];
					hcount -= h[i];
					ccount -= c[i];
				}
				bw.write(String.format("#%d %d %d %d %d\n", t, scount, dcount, hcount, ccount));
			}
			
		} // testcase
		bw.flush();
	}
}
728x90
반응형