BOJ_14696_딱지놀이_JAVA
문제 : 딱지놀이
링크 : BOJ_14696_딱지놀이
접근 방식
별(4), 동그라미(3), 네모(2), 세모(1) 순서로 우선순위를 두고 개수를 비교하여 A,B 둘 중 승자를 가려내는 문제이다.
각 숫자를 카운트할 배열을 선언하여 해당하는 수의 값을 증감시키면 쉽게 A,B가 각각 가지고 있는 딱지의 개수를 얻을 수 있다.
풀이 방법
-
A와 B의 딱지정보를 읽어들여 배열에 저장한다.
-
A,B의 딱지 개수 정보를 저장할 1차원 배열을 2개 생성한다. 카운트 배열이라고 칭하겠다.
-
A와 B의 딱지정보 배열을 순회하며 카운트 배열에 각 숫자의(4,3,2,1) 개수를 누적시킨다.
-
모두 누적이 끝나면 4의 개수부터 비교를 시작하여 A,B중 승자를 가린다. A가 승리시 A 출력, B가 승리시 B를 출력한다.
-
만약 1의 개수를 비교할 때까지도 승부가 나지 않으면 D를 출력한다.
소스 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_14696_딱지놀이 {
// 별 = 4, 동그라미 = 3 네모 = 2 세모 = 1
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(in.readLine());
// 라운드 수 만큼 반복
StringBuilder sb = new StringBuilder();
for(int r=0;r<N;r++) {
StringTokenizer st = new StringTokenizer(in.readLine()," ");
int[] cardA = new int[Integer.parseInt(st.nextToken())];
for(int i=0;i<cardA.length;i++) {
cardA[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(in.readLine()," ");
int[] cardB = new int[Integer.parseInt(st.nextToken())];
for(int i=0;i<cardB.length;i++) {
cardB[i] = Integer.parseInt(st.nextToken());
}
int[] cnt1 = new int[5];
int[] cnt2 = new int[5];
for(int i=0;i<cardA.length;i++) {
cnt1[cardA[i]]++;
}
for(int i=0;i<cardB.length;i++) {
cnt2[cardB[i]]++;
}
// 비교 부분
for(int i=4;i>0;i--) {
if(cnt1[i] > cnt2[i]) {
sb.append("A").append("\n");
break;
}else if(cnt1[i] < cnt2[i]) {
sb.append("B").append("\n");
break;
}else if(i == 1){
sb.append("D").append("\n");
break;
}
}
}
System.out.print(sb);
}
}