C언어/문제풀다 하나씩
상처 길이 찾기 문제
mcdn
2020. 5. 23. 13:21
반응형
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string board[5];
bool compare(char a, char b) {
if (a == '*' && b == '_') return true;
if (a == '_' && b == '*') return false;
if (a == '*') return true;
return false;
}
int main() {
for (int i = 0;i < 5;i++) {
cin >> board[i];
}
//first board[i][0] find '#'
for (int i = 0; i < 5;i++) {
int end = board[i].length();
sort(&board[i][0], &board[i][end], compare);
//cout << board[i];
int start = 0;
if (board[i][0] == '_') {
cout << 0 << endl;
}
else if (board[i][end - 1] == '*') {
cout << end << endl;
}
else {
while (1) {
int mid = (start + end) / 2;
if (board[i][mid] == '*' && board[i][mid + 1] == '_') {
cout << mid + 1 << endl;
break;
}
else if (board[i][mid] == '*') {
start = mid + 1;
}
else {
end = mid - 1;
}
}
}
}
}
입력 예제
__*_______________
______***_______
__**********__________
****________
******
출력 결과
1 3 10 4 6
원래 인덱스 찾아서 하는게 이상적인데
정렬되어 있지 않은 데이터에서 어떻게 binary search쓰는지 감이 안와서
어차피 길이 찾는 문제니까 compare함수 써서 정렬함
ㅋㅋㅋㅋㅋㅋ
sort()쓰면
*_________
*****___
이런식이 돼서
그냥 right인덱스만 찾으면 됨 ><
반응형