※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 26171번 문제인 An Interactive Problem이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/26171
26171번: An Interactive Problem
Troubles in the jury! The contest day of NWERC is tomorrow already, and they still need a nice interactive problem for the problem set. During this test session, the jury have gathered in an emergency meeting and started discussing problem ideas. All of th
www.acmicpc.net
행렬의 크기를 알지 못하므로 이를 구하기 위해 먼저 그 후보값을 1부터 1씩 늘려가며 1행의 해당 열에 원소가 존재하는지를 물어보자. 이 때 답으로 돌아오는 값이 "ArrayIndexOutOfBoundsException"인 가장 작은 N을 찾는다면 이를 이용해 행렬의 크기를 구해낼 수 있음을 관찰하자. 이 과정에서 정수값 대신 위와 같은 문자열이 입력으로 주어질 수 있으므로 구현 과정에서 이에 유의하자.
행렬의 크기를 구한 뒤에는 모든 행렬의 원소를 한 번씩 접근해 그 최댓값을 구하는 것으로 문제를 해결할 수 있다.
각 질문을 출력한 뒤 flush를 해줘 인터랙터가 질문을 읽을 수 있게 해주어야 함에 유의하자. endl을 이용하면 이러한 기능이 따라오므로 구현을 편하게 할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
int N;
string ret = "0";
int val;
int ans;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
while (1) {
cout << '?' << ' ' << 1 << ' ' << N + 1 << endl;
cin >> ret;
if (ret.length() < 16) {
ans = max(ans, stoi(ret));
N++;
}
else break;
}
for (int r = 2; r <= N; r++) {
for (int c = 1; c <= N; c++) {
cout << '?' << ' ' << r << ' ' << c << endl;
cin >> val;
ans = max(ans, val);
}
}
cout << '!' << ' ' << ans << endl;
}
'BOJ' 카테고리의 다른 글
[BOJ 14846 // C++] 직사각형과 쿼리 (0) | 2023.02.17 |
---|---|
[BOJ 3187 // C++] 양치기 꿍 (0) | 2023.02.17 |
[BOJ 27487 // C++] One and Two (0) | 2023.02.17 |
[BOJ 1185 // C++] 유럽여행 (0) | 2023.02.16 |
[BOJ 3182 // C++] 한동이는 공부가 하기 싫어! (0) | 2023.02.16 |