알고리즘

[TOPCODER 05.전체탐색] 09. 마법의 숫자

greenkang 2022. 10. 23. 17:05

[풀이방법1]

1. 4개의 카드를 배열로 선언

2. 카드에 타겟 숫자 존재여부를 return 하는 check함수 생성

3. 1~16까지 숫자를 반복하며 answer의 답변과 모두 일치하는 경우의 숫자를 출력

 

[코드1]

import java.util.Scanner;

public class NumberMagicEasy1 {

    public static void main(String[] args) {

        int[] card1 = {1, 2, 3, 4, 5, 6, 7, 8};
        int[] card2 = {1, 2, 3, 4, 9, 10, 11, 12};
        int[] card3 = {1, 2, 5, 6, 9, 10, 13, 14};
        int[] card4 = {1, 3, 5, 7, 9, 11, 13, 15};

        Scanner sc      = new Scanner(System.in);
        String  answer  = sc.next();

        for (int i = 1; i <= 16; i++) {
            if (check(card1, i) != answer.charAt(0))    continue;
            if (check(card2, i) != answer.charAt(1))    continue;
            if (check(card3, i) != answer.charAt(2))    continue;
            if (check(card4, i) != answer.charAt(3))    continue;

            System.out.println("MagicNumber : " + i);
        }

    }

    public static char check(int[] card, int targetNum) {

        for (int n: card) {
            if (n == targetNum) return 'Y';
        }
        return 'N';
    }
}

 


[풀이방법2]

1. 카드에서 각 숫자의 존재여부를 문자열로 표현해서 카드 1~4에 대한 정보를 문자열 배열에 담는다.

2. 숫자 1~16까지 반복하며 각 카드에 대한 존재여부를 문자열(temp)로 표현한다.

3. temp와 답변 answer이 같으면 해당 숫자를 출력한다.

 

[코드2]

import java.util.Scanner;

public class NumberMagicEasy2 {

    public static void main(String[] args) {

        // 카드의 정보를 문자열 배열에 저장
        String[] card = {"YYYYYYYYNNNNNNNN",
                         "YYYYNNNNYYYYNNNN",
                         "YYNNYYNNYYNNYYNN",
                         "YNYNYNYNYNYNYNYN"};

        Scanner sc      = new Scanner(System.in);
        String  answer  = sc.next();

        for (int n = 1; n <= 16; n++) {
            // 각 카드에 대한 존재여부를 문자열 temp로 표현
            String temp = "";
            for (int idx = 0; idx < 4; idx++) temp += card[idx].charAt(n - 1);

            if (answer.equals(temp)) {
                System.out.println("MagicNumber : " + n);
                return;
            }
        }

        return;
    }

}

 


[풀이방법3]

1. 각 숫자에 대해 1~4카드에서 존재여부를 Y,N을 사용하여 문자열로 표현하여 배열에 담는다.

2. 각 숫자를 반복하여 answer과 비교한다.

3. answer와 같으면 출력하고 종료한다.

 

[코드3]

import java.util.Scanner;

public class NumberMagicEasy3 {

    public static void main(String[] args) {

        String[] nAnswer = {"YYYY",
                            "YYYN",
                            "YYNN",
                            "YYNN",
                            "YNYY",
                            "YNYN",
                            "YNNY",
                            "YNNN",
                            "NYYY",
                            "NYYN",
                            "NYNY",
                            "NYNN",
                            "NNYY",
                            "NNYN",
                            "NNNY",
                            "NNNN"};

        Scanner sc      = new Scanner(System.in);
        String  answer  = sc.next();

        for (int n = 1; n <= 16; n++) {
            if (answer.equals(nAnswer[n - 1])) {
                System.out.println("MagicNumber : " + n);
                return;
            }
        }

        return;
    }

}