Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 삼성코테
- DP문제
- dfs
- TensorFlow Lite
- 초소형머신러닝
- 포스코 ai 교육
- 삼성코딩테스트
- 다이나믹프로그래밍
- 그리디
- tinyml
- 자료구조
- bfs문제
- 알고리즘
- 코테 문제
- DP
- 영상처리
- 코딩테스트
- 포스코 AI교육
- tflite
- sort
- dfs문제
- 딥러닝
- 임베디드 딥러닝
- 포스코 교육
- BFS
- 삼성역테
- 컴퓨팅사고
- 코테
- 삼성역량테스트
- MCU 딥러닝
Archives
- Today
- Total
코딩뚠뚠
[백준문제풀이] 1074 Z 본문
반응형
풀이일시 : 2020-09-24
문제 :
한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다.
만약, N > 1이 라서 왼쪽 위에 있는 칸이 하나가 아니라면, 배열을 크기가 2N-1 × 2N-1로 4등분 한 후에 재귀적으로 순서대로 방문한다.
다음 예는 22 × 22 크기의 배열을 방문한 순서이다.
N이 주어졌을 때, r행 c열을 몇 번째로 방문하는지 출력하는 프로그램을 작성하시오.
다음은 N=3일 때의 예이다.
입력 :
첫째 줄에 정수 N, r, c가 주어진다.
ex)
2 3 1
출력 :
r행 c열을 몇 번째로 방문했는지 출력한다.
ex)
11
제한 :
1 <= N <= 15
0 <= r,c <2^N
풀이 :
분할정복 문제이다.
2차원 배열을 Z모양으로 탐색한다. 2^N 형태가 되었을 때는 배열을 등분하여 Z모양으로 탐색할 것이다.
분할을 통해 최소단위인 2*2 크기까지 나누고 시작한다.
#include <iostream>
#include <math.h>
using namespace std;
int N, R, C;
int ans = 0;
void solve(int n, int r, int c) { //2^N, 0, 0으로 처음 들어온다.
//네개로 분할하다가 마지막 2*2가 됐을때 탐색
if (n == 2)
{
if (r == R && c == C) { //그 점을 탐색
cout << ans;
return;
}
ans++; //아니니깐 ++
if (r == R && c + 1 == C) { //열+1 점을 탐색
cout << ans;
return;
}
ans++; //아니니깐 ++
if (r + 1 == R && c == C) { //행+1 점을 탐색
cout << ans;
return;
}
ans++; //아니니깐 ++
if (r + 1 == R && c + 1 == C) { //행+1 열+1 점을 탐색
cout << ans;
return;
}
ans++; //아니니깐 ++
return; //이번 Z는 틀렸어 -> ans++ 네번 해줌의 성과
}
//네개로 계속하여 분할하는 코드
solve(n / 2, r, c); //행,열로 봤을때 왼쪽 위 사각형
solve(n / 2, r, c + n / 2); //오른쪽 위 사각형
solve(n / 2, r + n / 2, c); //왼쪽 아래 사각형
solve(n / 2, r + n / 2, c + n / 2); //왼쪽 위 사각형
}
int main() {
scanf_s("%d %d %d", &N, &R, &C);
solve(pow(2,N),0,0);
return 0;
}
추가자료 : 수식함수들
반응형
'알고리즘 문제풀이 > 백준문제풀이' 카테고리의 다른 글
[백준문제풀이] 1707 이분그래프 (0) | 2020.12.31 |
---|---|
[백준문제풀이] 1992 쿼드트리 (0) | 2020.12.31 |
[백준문제풀이] 4673 셀프 넘버 (0) | 2020.12.31 |
[백준문제풀이] 6588 골드바흐의 추측 (0) | 2020.12.31 |
[백준문제풀이] 1929 소수구하기 (0) | 2020.12.31 |