Algorithm/baekjoon
(재귀)1629 곱셈/1074 Z
쿠뱃봉
2022. 2. 19. 12:10
1.1629 곱셈
https://www.acmicpc.net/problem/1629
1629번: 곱셈
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
www.acmicpc.net
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
using ll = long long;
ll POW(ll a, ll b, ll c) {
if (b == 1) return a % c;
ll value = POW(a, b / 2, c);
value = value * value % c;
if (b % 2 == 0) return value;
return value * a % c;
}
int main() {
cin.tie(NULL);
cin.sync_with_stdio(false);
cout.tie(NULL);
ll a, b, c;
cin >> a >> b >> c;
cout << POW(a, b, c);
}
2.1074 Z
https://www.acmicpc.net/problem/1074
1074번: Z
한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을
www.acmicpc.net
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int function1(int n, int r, int c) {
if (n == 0) return 0;
int half = 1 << (n - 1);//1을 왼쪽으로 n-1번 이동, half=2^(n-1)
if (r < half && c < half) return function1(n - 1, r, c);
if (r < half && c >= half) return half*half+ function1(n - 1, r, c - half);
if (r >= half && c < half)return 2 * half * half + function1(n - 1, r - half, c);
return 3 * half * half + function1(n - 1, r - half, c - half);
}
int main() {
cin.tie(NULL);
cin.sync_with_stdio(false);
cout.tie(NULL);
int n, r, c;
cin >> n >> r >> c;
cout << function1(n, r, c);
}