Study/Problem Solving
[SWEA / Java] 4047번: 영준이의 카드 카운팅 (D3)
Pearlii
2023. 7. 27. 17:01
문제 풀이 날짜: 2023.07.27
포스트 작성일: 2023.07.27
* 학습 목적으로 작성하는 글입니다. 풀이가 정석적이지 못할 수도 있습니다.
문제 출처
SWEA 4047번: 영준이의 카드 카운팅 (D3)
키워드
문자열
풀이 접근법
- 간단한 문자열 처리 문제
- 크로아티아 알파벳 문제처럼, 문제에서 주어진 문자 4가지를 배열에 담아 참조하는 형식으로 접근했다.
- 또한 char 타입은 int 아스키코드로 자동 캐스팅된다는 점에서 착안해, 배열의 인덱스로 정수가 아닌 char 타입의 아스키코드를 참조하게 했다.
코드
import java.util.*;
import java.io.*;
class Solution
{
private static final int MAX = 'Z';
private static final int NUM = 13;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
int[] types = {'S', 'D', 'H', 'C'};
StringBuilder sb = new StringBuilder();
for(int test_case = 1; test_case <= T; test_case++) {
String input = br.readLine();
boolean[][] cards = new boolean[MAX][NUM + 1];
sb.append("#").append(test_case).append(" ");
boolean isError = false;
int len = input.length();
for(int i = 0; i < len; i = i + 3) {
char type = input.charAt(i);
int digit1 = input.charAt(i + 1) - '0';
int digit2 = input.charAt(i + 2) - '0';
int num = digit1 * 10 + digit2;
if(!cards[type][num]) { //아스키코드를 배열 인덱스로
cards[type][num] = true;
}
else {
isError = true;
sb.append("ERROR").append("\n");
break;
}
}
if(isError) {
continue;
}
for(int type : types) { //4종류 카드의 장수 검사
int count = NUM;
for(boolean b : cards[type]) {
if(b == true) {
count--;
}
}
sb.append(count).append(" ");
}
sb.append("\n");
}
System.out.println(sb);
}
}
git 링크
(git 링크 첨부)