[문제][알고스팟] 쿼드트리 뒤집기 (QUADTREE)
2018. 12. 10. 23:47ㆍ[개발] 지식/알고리즘 문제풀이
스스로 풀었는가? O
힌트를 참고했나? X
난이도 '하'의 쉬운 문제였다.
상하로 뒤집은 결과를 구해야 했기에, 일단 4개영역(1,2,3,4사분면)의 쿼드트리를 따로 분리해서 재조합할 필요가 있었다.
상하로 뒤집을 경우 기존의 2사분면 -> 1사분면 -> 3사분면 -> 4사분면이 아닌 3사분면 -> 4사분면 -> 2사분면 -> 1사분면으로 재조합해야 한다.
x로 시작해서 분할되는 경우 재귀함수로 분할의 끝까지 탐색한 후 3사분면 -> 4사분면 -> 2사분면 -> 1사분면으로 재조합하면서 리턴하도록 했다. 즉, 현재 문자열이 x가 아닌 경우는 그대로 리턴하고 x인경우 4가지 영역을 각각 재귀호출했다.
내가 푼 소스는 아래와 같다.
package apss;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class QUADTREE {
public static String str;
public static int idx;
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
System.setIn(new FileInputStream("D:\\sample_input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine().trim());
for(int testCase=1; testCase<=T; testCase++) {
str = br.readLine().trim();
idx = 0;
String result = recursive();
bw.flush();
bw.write( result);
bw.write("\n");
}
bw.close();
}
public static String recursive() {
char c = str.charAt(idx);
if(c != 'x') {
return c + "";
}
// 2사분면 search
idx++;
String str2 = recursive();
// 1사분면 search
idx++;
String str1 = recursive();
// 3사분면 search
idx++;
String str3 = recursive();
// 4사분면 search
idx++;
String str4 = recursive();
// 2 + 1 + 3 + 4 하면 뒤집은 쿼드트리가 나온다.
return "x" + str3 + str4 + str2 + str1;
}
}
'[개발] 지식 > 알고리즘 문제풀이' 카테고리의 다른 글
[문제][알고스팟]WILDCARD (0) | 2019.02.06 |
---|---|
[문제][알고스팟] 울타리 잘라내기 (0) | 2019.01.28 |
[문제][알고스팟] BOARDCOVER (게임판 덮기) (0) | 2018.08.22 |
[문제][알고스팟] PICNIC (0) | 2018.08.13 |
[문제][알고스팟] 근거리네트워크 (LAN) (1) (0) | 2018.06.06 |
<