C언어/문제풀다 하나씩
이중배열에서 binary search 해보기
mcdn
2020. 5. 23. 12:51
반응형
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int n;
char board[10][10];
int main() {
cin >> n;
for (int i = 0;i < n;i++) {
for (int j = 0; j < n;j++) {
cin >> board[i][j];
}
}
//first board[i][0] find '#'
int start = 0;
int end = n - 1;
int line;
while (1) {
int mid = (start + end) / 2;
if (board[mid][0] == '#' && board[mid + 1][0] == '0') {
line = mid;
break;
}
else if (board[mid][0] == '#') {
start = mid + 1;
}
else {
end = mid - 1;
}
}
//cout << line; good! # is in 5th line
start = 0;
end = n - 1;
int kan;
while (1) {
int mid = (start + end) / 2;
if (board[line][mid] == '#' && board[line][mid+1] == '0') {
kan = mid;
break;
}
else if (board[line][mid] == '#') {
start = mid + 1;
}
else {
end = mid - 1;
}
}
cout << line << " " << kan;
}
입력 예제
8
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
출력 결과
5 2

방법은 두가지가 있다.
0,0 8,8 가운데를 계속 찾아나가는 것
아니면 끝이 있는 줄을 찾고 칸을 찾는 것
두번째가 더 구현하기 쉬워서 두번째 방식으로 함
그래서line =5 kan =2
찾고 출력

반응형