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

찾고 출력

 

반응형