[백준 1074번 / Java] Z코딩테스트/백준2023. 7. 7. 19:56
Table of Contents
728x90
728x90
문제 링크
Silver 1
https://www.acmicpc.net/problem/1074
풀이
단순 구현문제라고 생각했고 재귀를 통해 풀었다.
문제에서 2^N의 판이 주어진다고 했기 때문에 재귀 조건을 반대로 2^N의 수에서 /2를 해가며 1이나올 때 까지 반복했다.
그렇게 하면 초기 1칸일 때의 Z배열까지 반복을 돌릴 수 있다.
과정에서, 현재 [r,c]가 4분면 중 어디에 속해있는지만 알 수 있으면, 값을 더해주기만 하면 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BaekJoon1074 {
private static int cnt = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int r = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
int where = (int) Math.pow(2 ,N);
findWhere(where, r, c);
System.out.println(cnt);
}
private static void findWhere(int where, int r, int c) {
if(where == 1) return;
if(r < where/2 && c < where/2) {
findWhere(where/2, r, c);
}
else if(r < where/2 && c >= where/2) {
cnt += where * where / 4;
findWhere(where/2, r, c - where/2);
}
else if(r >= where/2 && c < where/2) {
cnt += (where * where / 4) * 2;
findWhere(where/2, r - where/2, c);
}
else {
cnt += (where * where / 4) * 3;
findWhere(where/2, r - where/2, c - where/2);
}
}
}
728x90
300x250
@mag1c :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!