[Topcoder] NumberMagicEasy(숫자 마술 - 쉬움)

2023. 2. 19. 18:28Algorithm

타로는 하나코에게 마술을 보여준다.

타로: 안녕하세요 하나코. 제가 마술을 보여드릴게요. 16보다 작거나 같은 양의 정수를 상상하십시오.
하나코: 알았어. 상상했어요.
타로: (타로가 하나코에게 1번 카드를 보여줍니다.) 이 카드에 당신의 번호가 들어 있나요?
하나코: 네.
타로: (타로가 하나코에게 2번 카드를 보여줍니다.) 이 카드에 당신의 번호가 들어 있나요?
하나코: 아니요.
타로: (타로가 하나코에게 3번 카드를 보여줍니다.) 이 카드에 당신의 번호가 들어 있나요?
하나코: 네.
타로: (타로가 하나코에게 4번 카드를 보여줍니다.) 이 카드에 당신의 번호가 들어 있나요?
하나코: 네.
타로: 네 번호는 5번이야!

당신의 임무는 이 마술을 모방한 프로그램을 작성하는 것이다. 답에는 하나코의 답이 주어집니다. i번째 문자는 i번째 질문에 "예"라고 대답하면 "Y"이고, i번째 질문에 "아니오"라고 대답하면 "N"입니다. 하나코가 상상한 정수를 반환합니다.

Definition

Class:
 
NumberMagicEasy
Method:
 
theNumber
Parameters:
 
string
Returns:
 
int
Method signature:
 
int theNumber(string answer)
(be sure your method is public)

Examples

0)
"YNYY"
Returns: 5
The example from the statement.
1)
"YNNN"
Returns: 8
8 is the only number that exists on the first card and does not exist on any other cards.
2)
"NNNN"
Returns: 16
3)
"YYYY"
Returns: 1
4)
"NYNY"
Returns: 11

탐색 문제이다.

 

#include <string>
using namespace std;

class NumberMagicEasy{
    public:
    char checkInCard(int card[], int num){
        for(int i=0; i<8; i++){
            if(num == card[i]){
                return 'Y';
            }
        }
        return 'N';
    }

먼저 해당 숫자가 그 카드에 들어가있는지 여부를 체크하는 checkInCard 함수이다. 

 

특정 숫자 num이 특정 card의 8가지 숫자 중에 들어가있으면 Y를, 없으면 N을 반환한다.

 

    int theNumber(string answer){
        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};
        
        string temp;
        for(int i=1; i<=16; i++){
            if(checkInCard(card1, i)==answer[0] &&checkInCard(card2, i)==answer[1] &&checkInCard(card3, i)==answer[2] &&checkInCard(card4, i)==answer[3]){
                return i;
            }
        }
        return 0;
    }

전체 16가지 숫자들을 순회하면서 하나코의 대답과 일치하는 숫자가 있으면 이를 반환한다.