본문 바로가기
Problem Solving/SWEA

[SWEA] 4047. 영준이의 카드 카운팅

by 테리는당근을좋아해 2020. 2. 21.

문제

트럼프카드는 하트, 다이아, 클럽, 스페이스 네가지 종류가 있으며 각 카드마다 1 ~ 10, J, K, Q  13장의 카드가 있다

 

즉 카드는 총 52장의 카드가 있다.

 

영준이가 받은 카드가 문자열로 주어질 때, 영준이가 받지 않은 나머지 카드가 몇 개 존재하는 지 구하는 문제

 

풀이방법

1) 각 하트, 다이아, 클럽, 스페이스 마다 길이 14의 배열을 만들고 0으로 초기화한다.

 

2) 입력된 문자열을 3의 길이로 나누어 영준이가 받은 카드가 어떤 것인지 구분한다.

 

3) 각 배열에서 영준이가 받은 카드를 1로 표시해준다.

 

4) 영준이가 받은 카드를 모두 체크해준 다음 각 배열에서 0의 갯수를 센다.

 

소스코드

package samsung;

import java.util.*;

public class s_4047 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int test = sc.nextInt();
		
		for(int t = 1; t <= test; t++) {
			String str = sc.next();
			int[] s = new int[14];
			int[] d = new int[14];
			int[] h = new int[14];
			int[] c = new int[14];
			
			int s_cnt = 0;
			int d_cnt = 0;
			int h_cnt = 0;
			int c_cnt = 0;
		
			
			for(int i = 0; i < str.length() / 3; i++) {
				String shape = str.substring(3*i, 3*i+1);
				int num = Integer.valueOf(str.substring(3*i + 1, 3*i + 3));
				if(shape.equals("S")) {
					s[num]++;
				}
				else if(shape.equals("D")) {
					d[num]++;
				}
				else if(shape.equals("H")) {
					h[num]++;
				}
				else if(shape.equals("C")) {
					c[num]++;
				}
			}
			int flag = 0;
			for(int i = 1; i < 14; i++) {
				if(s[i] > 1 || d[i] > 1 || h[i] > 1 || c[i] > 1) {
					flag = 1;
					System.out.println("#" + t + " " + "ERROR");
					break;
				}
				if(s[i] == 0)
					s_cnt++;
				if(d[i] == 0)
					d_cnt++;
				if(h[i] == 0)
					h_cnt++;
				if(c[i] == 0)
					c_cnt++;
			}
			if(flag == 0) {
				System.out.println("#" + t + " " + s_cnt + " " + d_cnt + " " + h_cnt + " " + c_cnt);
			}
		}
	}
}

 

댓글