반응형
문제
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#include<iostream> #include<string> using namespace std; string reverse(string::iterator &it) { char head = *it; ++it; if (head == 'b' || head == 'w') //전체가 블랙이라면 b, 전체가 화이트라면 w, 그렇기에 최소로 쪼개지는 단위이며 아닐시 다음 노드에 x로 출력하고 다시 분해 return string(1, head); string upperLeft = reverse(it); // 위에서 왼쪽 자리 -> 밑에서 왼쪽 자리로 string upperRight = reverse(it); // 위에서 오른쪽 자리 -> 밑에서 오른쪽 자리로 string lowerLeft = reverse(it); // 아래에서 왼쪽 자리 -> 위에서 왼쪽 자리로 string lowerRight = reverse(it); // 아래에서 오른쪽 자리 -> 위에서 오른쪽 자리로 //주석에 설명한대로 위치를 바꿔서 리턴해주면 정답!(항상 먼저 분할하니까 맨 앞 x출력은 고정) return string("x") + lowerLeft + lowerRight + upperLeft + upperRight; } int main(int argc, char *argv[]) { int Testcase; string input; cin >> Testcase; for (int i = 0; i < Testcase; i++) { cin >> input; string::iterator it = input.begin(); cout << reverse(it) << endl; } return 0; } Colored by Color Scripter |
cs |
이 문제는 처음에 4등분을 한 뒤에 X가 아니라면 즉. Black 또는 White로 이루어져 있다면 더 이상의 분할을 멈추고 반환하는 것을 알고 이해하면 문제를 풀기 쉽다. 이후 마지막에 뒤집을 경우 바뀌는 위치를 return 할 때 적정 위치에 값을 주어 표현하였다.
반응형
'Algorithm' 카테고리의 다른 글
[#2-5]분할정복-문제: 팬미팅(문제 ID: FANMEETING) (0) | 2021.09.05 |
---|---|
[#2-4]분할정복-문제: 울타리 잘라내기(문제 ID: FENCE) (0) | 2021.09.05 |
[#2-2]분할정복-예제: 카라츠바의 빠른 곱셈 알고리즘 (0) | 2021.09.05 |
[#2-1]분할 정복-예제: 수열의 빠른 합과 행렬의 빠른 제곱 (0) | 2021.09.05 |
[#1]완전탐색-n개의 원소 중 m개를 고르는 모든 조합을 찾는 알고리즘 (0) | 2021.09.05 |