으하하 공부일기
[SWEA] - 4047. 영준이의 카드 카운팅 (D3) 본문
[문제]
최근 영준이는 카드 게임에 꽂혀 있다.
영준이가 하는 카드 게임에는 한 덱의 카드가 필요한데 여기서 얘기하는 “한 덱”이란 스페이드, 다이아몬드, 하트, 클로버 무늬 별로 각각 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);
}
}
}
'SWEA > D3' 카테고리의 다른 글
[SWEA] - 4371. 항구에 들어오는 배 (D3) (0) | 2022.05.11 |
---|---|
[SWEA] - 4299. 태혁이의 사랑은 타이밍 (D3) (0) | 2022.05.11 |
[SWEA] - 3975. 승률 비교하기 (D3) (0) | 2022.05.11 |
[SWEA] - 3809. 화섭이의 정수 나열 (D3) (0) | 2022.05.11 |
[SWEA] - 3750. Digit sum (D3) (0) | 2022.05.11 |