Dazzling 개발 노트
[백준] 1074 - Z (Java) 본문
[백준] 1074 - Z (Java)
문제
https://www.acmicpc.net/problem/1074
풀이/후기
처음 풀이가 꽤 마음에 들었는데 배열의 크기가 3 이상이 되면서 잘 안됐당...
검색해보니 당연히 모든 배열을 다 채운 후에 답을 얻어내는 접근은 시간초과가 난다고 한다.
주어진 특정 부분만 돌아야 하므로 문제에서 주어진 r과 c가 어느 구역에 포함되는지를 판단해야 한다.
풀다가 막혀서 검색을 했었는데,
내 코드랑 가장 비슷한 코드를 비교하면서 풀었는데 아무리 해도 답이 안나왔다...
뭔가 이상해서 전부 지우고 그사람 코드를 돌려봤더니 여기도 오답...ㅎ ㅜㅜㅜㅜ 시간 버렸다...
그래서 다시 새로운 풀이로 어찌어찌 완성하긴 했다....
코드
import java.io.*;
import java.util.*;
public class Main {
static int size = 1;
static int N, r, c;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
r = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
size = (int) Math.pow(2, N);
int count = 0;
int x = 0;
int y = 0;
while (size > 0) {
size /= 2; //배열을 점점 줄여감
int nextR = x + size;
int nextC = y + size;
//배열의 시작점
if (r < nextR && c < nextC) { //1구역
count += 0;
} else if (r < nextR) { //2구역
count += size * size;
y += size;
} else if (c < nextC) { //3구역
count += size * size * 2;
x += size;
} else { //4구역
count += size * size * 3;
x += size;
y += size;
}
// 배열이 1*1이 되면 종료
if (size == 1) {
System.out.println(count);
break;
}
}
}
}
Commit
https://github.com/allrightDJ0108/CodingTestStudy/commit/1425500d886bb8515312d0fdcf25384abffba8b9
참고
https://velog.io/@lifeisbeautiful/Java-%EB%B0%B1%EC%A4%80-1074%EB%B2%88-Z-%EC%9E%90%EB%B0%94