[Topcoder] NumberMagicEasy(숫자 마술 - 쉬움)
2023. 2. 19. 18:28ㆍAlgorithm
타로는 하나코에게 마술을 보여준다.
타로: 안녕하세요 하나코. 제가 마술을 보여드릴게요. 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가지 숫자들을 순회하면서 하나코의 대답과 일치하는 숫자가 있으면 이를 반환한다.
'Algorithm' 카테고리의 다른 글
[TopCoder] BadNeighbors (나쁜 이웃들) (0) | 2023.02.25 |
---|---|
[TopCoder] CorporationSalary (회사 급여) (0) | 2023.02.25 |
[Topcoder] MazeMaker(미로 제작자) (0) | 2023.02.19 |
[Topcoder] CrazyBot(미친 로봇) (0) | 2023.02.19 |
[Topcoder] InterestingParty(흥미로운 파티) (0) | 2023.02.12 |