알고리즘
[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;
}
}