시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 512 MB 101 32 11 47.826%

문제

채점 프로그램과 숫자 야구를 해보자.

숫자 야구는 채점 프로그램이 정한 N자리 수 A를 맞추는 게임이다. A는 0부터 9까지 서로 다른 숫자 N개로 이루어져 있고, 0으로 시작할 수도 있다. A를 맞추려면 채점 프로그램에게 질문을 해야 한다. 

채점 프로그램에게 수 B를 질문하면, 스트라이크와 불의 개수를 알려준다. 스트라이크는 숫자와 위치가 일치하는 숫자의 개수이고, 볼은 숫자는 맞는데 위치는 일치하지 않는 숫자의 개수이다. 

채점 프로그램에게 질문을 해서 A가 무엇인지 알아내보자.

함수 목록 및 정의

제공되는 "NB.h"를 include 해야 한다.

Grader가 제공하는 함수는 다음과 같다.

  • std::pair<int,int> guess(std::string B)
    • 채점 프로그램에게 수 B를 질문한다. 수가 0으로 시작할 수 있기 때문에, 수 B는 std::string 로 변환한한 형태이다.
    • B의 길이가 N이 아닌 경우 "틀렸습니다"를 결과로 받는다.
    • 이 함수를 9번보다 많이 호출하는 경우 "틀렸습니다"를 받는다.
    • 수 B가 A와 일치하는 경우에는 게임을 종료해야 하며, 새로운 게임이 시작하기 전까지 이 함수를 다시 호출하면 안된다. 수 A를 맞춘 이후에 다시 이 함수를 호출하면 "틀렸습니다"를 받는다.
    • B에 같은 숫자가 들어있거나 숫자가 아닌 문자가 들어있는 경우 "틀렸습니다"를 받는다.
    • 리턴값의 첫 번째 수는 스트라이크, 두 번째 수는 볼의 개수이다.

다음과 같은 함수를 작성해야 한다.

  • void init(int T, int N)
    • 프로그램이 실행된 직후, 한 번만 호출된다. T는 채점 프로그램과 하게 될 게임의 횟수이며, N은 채점 프로그램이 생각한 수의 자릿수이다.
  • void game()
    • 이 함수의 호출은 숫자 게임의 시작을 의미하며, 종료는 게임의 끝을 의미한다.
    • 이 함수가 호출되면, 채점 프로그램에게 질문을 해서 수 A를 알아내야 한다.
    • 이 함수는 총 T번 호출된다.

Grader가 실행 도중 "틀렸습니다"라고 판정한 경우, 그 즉시 프로그램을 종료된다.

입력

Sample Grader는 다음과 같은 정보를 Standard Input을 통해서 읽는다.

첫째 줄에 T와 N이 주어진다. 둘째 줄부터 T개의 줄에 채점 프로그램이 생각한 수 A가 한 줄에 하나씩 주어진다.

출력

Sample Grader는 다음과 같은 정보를 Standard Input을 통해서 출력한다.

T개의 게임에서 채점 프로그램이 생각한 수를 모두 맞췄다면 "AC"를, 그 외에는 "WA"를 출력한다.

제한

  • 1 ≤ T ≤ 5,040
  • 3 ≤ N ≤ 4

제공 파일

서브태스크 1 (30점)

  • N = 3

서브태스크 2 (70점)

  • N = 4

예제 입력 1

2 4
0123
3921

예제 출력 1

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++14, C++17, C++2a

채점

  • 예제는 채점하지 않는다.