일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 청년 AI Big Data 아카데미 13기
- m1 docker install
- docker 완전 삭제
- 코드업 1020 java
- 프로그래머스 나누어 떨어지는 숫자 배열 파이썬
- codeup 1020 자바
- 가운데 글자 가져오기 java
- 코드업 1020 자바
- codeup 1020 java
- 프로그래머스 가운데 글자 가져오기 파이썬
- m1 docker
- 프로그래머스 가운데 글자 가져오기 python
- 핸즈온 머신러닝
- 트리의 지름 자바
- 빅분기실기
- 최소 스패닝 트리
- 트리의 지름 java
- docker 삭제
- docker remove
- 최단 경로 알고리즘
- 나누어 떨어지는 숫자 배열 python
- 가운데 글자 가져오기 자바
- 가운데 글자 가져오기 python
- 프로그래머스 가운데 글자 가져오기 자바
- 최소 스패닝 트리 자바
- 빅데이터분석기사
- 가운데 글자 가져오기 파이썬
- 청년 Ai Big Data 아카데미
- 프로그래머스 나누어 떨어지는 숫자 배열 자바
- 나누어 떨어지는 숫자 배열 java
- Today
- Total
NineTwo meet you
[백준/자바] 1074 Z 본문
설명
기존에 맞았던 코드가 재채점 되면서 틀려서 다시 풀었다.
2^N X 2^N인 2차원 배열을 Z 모양으로 탐색한다.
size는 2^n -> 2^(n-1) -> ... -> 2^1 -> 1로 가면서 주어진 r행 c열을 찾게 된다.
0 영역의 왼쪽 위의 행을 x, 열을 y라 하면 각 영역의 특징은 다음과 같다.
0 영역 : x <= r < x+size/2 이면서 y <= c < y+size/2
1 영역 : x <= r < x+size/2 이면서 y+size/2 <= c < y+size
2 영역 : x+size/2 <= r < x+size 이면서 y <= c < y+size/2
3 영역 : x+size/2 <= r < x+size 이면서 y+size/2 <= c < y+size
0 영역이라면 앞선 영역이 없으므로 아무 값도 더하지 않고 넘어간다.
1 영역 이라면 앞서 0 영역을 모두 지나쳐야 도달할 수 있기 때문에 0 영역의 개수인 (size/2)^2만큼을 결괏값에 더한다.
2 영역 이라면 0 영역과 1 영역을 모두 지나쳐야 도달할 수 있기 때문에 2개의 영역의 개수인 (size/2)^2 * 2만큼을 결괏값에 더한다.
3 영역 이라면 0 영역, 1 영역과 2 영역을 모두 지나쳐야 도달할 수 있기 때문에 3개의 영역의 개수인 (size/2)^2 * 3만큼을 결괏값에 더한다.
n = 3일 때, size는 8이 되고 4가지 영역은 다음과 같다.
예제 2번을 기준으로 설명하면 현재 영역에서 7행 7열은 3 영역에 속하게 된다.
그럼 다시 사이즈를 반으로 줄이고 3 영역의 왼쪽 위의 행을 x, 열을 y로 놓고 계산하게 된다.
3 7 7 일때,
3영역 (16 * 3) -> 3영역 (4 * 3) -> 3영역 (1 * 3) => 63이 나오게 된다.
코드
'프로그래밍 문제 > 백준' 카테고리의 다른 글
[백준/자바] 4458 첫 글자를 대문자로 (0) | 2020.12.28 |
---|---|
[백준/자바] 2711 오타맨 고창영 (0) | 2020.12.28 |
[백준/자바] 1019 책 페이지 (0) | 2020.12.28 |
[백준/자바] 10610 30 (0) | 2020.12.24 |
[백준/자바] 12904 A와 B (0) | 2020.12.24 |