Binary Search를 사용해 쉽게 구현할 수 있다.
변수가 알파벳 한 글자로 되어 있는데 (개인적으로 이런 변수 선언을 매우 싫어하지만 문제에 그렇게 나와있으니 그대로 진행...)
여러 번 반복 탐색을 통해 숫자 p가 무엇인지 맞추는 문제인데, t는 test case 개수, a와 b는 문제에서 제시하는 p의 minimum과 maximum, q는 나의 guessing이다.
Kick Start에는 흥미롭게도 interactive 형식의 문제가 있다. 이 문제가 바로 그런 형식인데, Kick Start의 judging system과 내가 짠 코드가 동시에 실행되는 것이다. 쉽게 말해서, 코드에서 출력한 값을 기반으로 다시 input을 받는 형식이다. 여기서는 내가 guess한 q값이 p와 일치하면 "CORRECT", 더 작으면 "TOO_SMALL", 더 크면 "TOO_BIG"을 입력받게 된다.
Guess한 값이 더 작을 경우에는 minimum을 q로 올려주고, 더 클 경우에는 maximum을 q로 내려주었다.
다음은 코드이다.
#include <iostream>
#include <string>
using namespace std;
int main() {
int t, a, b, n, p, q;
string word;
cin >> t; //#testcase
for (int i = 0; i < t; i++) {
cin >> a >> b >> n; //exclusively lower bound, upper bound, and max number of guesses
while (n >= 0) {
q = (a + b) / 2;
cout << q << '\n'; //my guess
cin >> word;
if (word == "CORRECT")
break;
else if (word == "TOO_SMALL") {
a = q + 1;
n--;
}
else { //TOO_BIG
b = q - 1;
n--;
}
}
}
return 0;
}
'Programming > Algorithms' 카테고리의 다른 글
백준 #1966. 프린터 큐 (0) | 2019.09.27 |
---|---|
백준 #9012. 괄호 (0) | 2019.09.24 |
백준 #11866. 조세퍼스 문제 0 (0) | 2019.09.23 |
백준 #4344. 평균은 넘겠지 (0) | 2019.09.21 |
백준 #11650. 좌표 정렬하기 (0) | 2019.09.16 |