SWEA/D3

[SWEA] - 4047. 영준이의 카드 카운팅 (D3)

0으하하0 2022. 5. 11. 16:01

[문제]

최근 영준이는 카드 게임에 꽂혀 있다.
영준이가 하는 카드 게임에는 한 덱의 카드가 필요한데 여기서 얘기하는 “한 덱”이란 스페이드, 다이아몬드, 하트, 클로버 무늬 별로 각각 A, 2~10, J, Q, K의 라벨 즉 4개의 무늬 별로
각각 13장씩 총 52장의 카드가 있는 모음을 의미한다.
편의상 A는 1, J, Q, K는 11, 12, 13으로 하여 1~13의 숫자가 카드에 적혀있다고 하자.
영준이는 몇 장의 카드를 이미 가지고 있는데 게임을 하기 위해서 몇 장의 카드가 더 필요한지 알고 싶어 한다.
그리고 이미 겹치는 카드를 가지고 있다면 오류를 출력하고자 한다.
지금 가지고 있는 카드의 정보가 주어지면 이 작업을 수행하는 프로그램을 작성하라.

[입력]
맨 위 줄에 테스트케이스의 개수가 주어진다.
각 테스트케이스 별로 순서대로 첫 번째 줄에 지금 영준이가 가지고 있는 카드에 대한 정보 S (1 ≤ |S| ≤ 1000)가 주어진다.
S는 각각 3자리로 표현되는 카드들의 정보를 붙여서 만든 하나의 문자열인데 각 카드는 TXY 꼴로 표현되며,
T는 카드의 무늬(S, D, H, C)이며 XY는 카드의 숫자 (01 ~ 13)이다.

[출력]
각 테스트케이스 별로 순서대로 한 줄씩 답을 출력하는데, 문자열 S를 보고 지금 무늬 별로(S, D, H, C 순서로) 몇 장의 카드가 부족한지 출력하여라.
이미 겹치는 카드가 있다면 문자열 “ERROR” (쌍따옴표는 출력하지 않는다)를 출력한다

문제 풀기

4047. 영준이의 카드 카운팅

 


[풀이]

  • 카드의 정보를 문자열로 저장한뒤 substring을 이용하여 문자와 숫자로 나누어 저장한다.
  • 무늬 별로 배열을 선언하여 해당 무늬의 숫자가 몇인지 저장한다.
    (숫자는 인덱스 값이고, 저장되는 값은 해당 숫자가 몇 번 들어오는지 카운팅)
  • 숫자가 1이 넘어가면 2번이상 나온 것이므로 ERROR 출력
  • ERROR가 나지 않았으면 없는 카드가 무엇인지 확인하여 출력
import java.util.Scanner;

class Solution {	
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		
		int t = sc.nextInt();
		
		for(int tc=1; tc<=t; tc++) {
			int s[] = new int[14];
			int d[] = new int[14];
			int h[] = new int[14];
			int c[] = new int[14];
			
			int scnt = 0;
			int dcnt = 0;
			int hcnt = 0;
			int ccnt = 0;
			
			String str = sc.next();
			
			for(int i=0; i<str.length()/3; i++) {
				String shape = str.substring(3*i, 3*i+1);
				int n = Integer.parseInt(str.substring(3*i+1, 3*i+3));
				
				if(shape.equals("S")) s[n]++;
				else if(shape.equals("D")) d[n]++;
				else if(shape.equals("H")) h[n]++;
				else if(shape.equals("C")) c[n]++;
			}
			
			boolean flag = true;
			for(int i=1; i<14; i++) {
				if(s[i] > 1 || d[i] > 1 || h[i] > 1 || c[i] > 1) {
					System.out.format("#%d %s\n", tc, "ERROR");
					flag = false;
					break;
				}
				
				if(s[i] == 0) scnt++;
				if(d[i] == 0) dcnt++;
				if(h[i] == 0) hcnt++;
				if(c[i] == 0) ccnt++;
			}
			if(flag)
				System.out.format("#%d %d %d %d %d\n", tc, scnt, dcnt, hcnt, ccnt);
		}
	}
}