/ BOJ

BOJ_14696_딱지놀이_JAVA

문제 : 딱지놀이

링크 : BOJ_14696_딱지놀이

접근 방식

별(4), 동그라미(3), 네모(2), 세모(1) 순서로 우선순위를 두고 개수를 비교하여 A,B 둘 중 승자를 가려내는 문제이다.

각 숫자를 카운트할 배열을 선언하여 해당하는 수의 값을 증감시키면 쉽게 A,B가 각각 가지고 있는 딱지의 개수를 얻을 수 있다.

풀이 방법

  1. A와 B의 딱지정보를 읽어들여 배열에 저장한다.

  2. A,B의 딱지 개수 정보를 저장할 1차원 배열을 2개 생성한다. 카운트 배열이라고 칭하겠다.

  3. A와 B의 딱지정보 배열을 순회하며 카운트 배열에 각 숫자의(4,3,2,1) 개수를 누적시킨다.

  4. 모두 누적이 끝나면 4의 개수부터 비교를 시작하여 A,B중 승자를 가린다. A가 승리시 A 출력, B가 승리시 B를 출력한다.

  5. 만약 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);

	}

}