시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
2 초 | 512 MB | 215 | 67 | 26 | 17.333% |
채점 프로그램과 숫자 야구를 해보자.
숫자 야구는 채점 프로그램이 정한 N자리 수 A를 맞추는 게임이다. A는 0부터 9까지 서로 다른 숫자 N개로 이루어져 있고, 0으로 시작할 수도 있다. A를 맞추려면 채점 프로그램에게 질문을 해야 한다.
채점 프로그램에게 수 B를 질문하면, 스트라이크와 볼의 개수를 알려준다. 스트라이크는 숫자와 위치가 일치하는 숫자의 개수이고, 볼은 숫자는 맞는데 위치는 일치하지 않는 숫자의 개수이다.
채점 프로그램에게 질문을 해서 A가 무엇인지 알아내보자.
제공되는 "NB.h
"를 include 해야 한다.
Grader가 제공하는 함수는 다음과 같다.
std::pair<int,int> guess(std::string B)
std::string
로 변환한 형태이다.다음과 같은 함수를 작성해야 한다.
void init(int T, int N)
void game()
Grader가 실행 도중 "틀렸습니다"라고 판정한 경우, 그 즉시 프로그램을 종료된다.
Sample Grader는 다음과 같은 정보를 Standard Input을 통해서 읽는다.
첫째 줄에 T와 N이 주어진다. 둘째 줄부터 T개의 줄에 채점 프로그램이 생각한 수 A가 한 줄에 하나씩 주어진다.
Sample Grader는 다음과 같은 정보를 Standard Input을 통해서 출력한다.
T개의 게임에서 채점 프로그램이 생각한 수를 모두 맞췄다면 "AC"를, 그 외에는 "WA"를 출력한다.
2 4 0123 3921
AC
다음은 위의 입출력 예제에 대해서, Sample Grader와 Interaction하는 과정을 나타낸 것이다.
NB.cpp |
Grader | 설명 |
---|---|---|
T = 2, N = 4 |
Grader에서 T와 N의 값을 읽어들인다. | |
init(T = 2, N = 4) 호출 |
init 함수는 초기에 한 번만 호출된다. |
|
A = "0123" |
||
game() 호출 |
||
guess("1324") 호출 |
||
return {1, 2}; |
스트라이크 = 1, 볼 = 2 | |
guess("1234") 호출 |
||
return {0, 3}; |
스트라이크 = 0, 볼 = 3 | |
guess("9876") 호출 |
||
return {0, 0}; |
스트라이크 = 0, 볼 = 0 | |
guess("0132") 호출 |
||
return {2, 2}; |
스트라이크 = 2, 볼 = 2 | |
guess("0123") 호출 |
||
return {4, 0}; |
스트라이크 = 4, 볼 = 0 | |
game() 종료 |
A를 정확하게 맞추었다. | |
A = "3921" |
||
game() 호출 |
||
guess("3921") 호출 |
||
return {4, 0}; |
||
game() 종료 |
A를 정확하게 맞추었다. | |
AC |
위의 과정은 실제 정해와 전혀 관련이 없으며, 단지 이해를 돕기 위해 만든 예시이다. 위 예시는 채점 프로그램과 숫자 야구를 두 번 하면서, 두 번 모두 우연히 A를 정확하게 맞추었다.
C++17, C++14, C++20