ใ๋ชฉ์ฐจใ
0. ๊ฐ์
1. ๋ฌธ์
2. ํ์ด
3. ์ฝ๋
0. ๊ฐ์
๊ฐ๋จํ๊ฒ ํ๋ฆด ์ค ์๊ณ ํธ๊ธฐ๋กญ๊ฒ ํ์ด๋๊ฐ์ง๋ง, ์๊ฐ๋ณด๋ค ์๊ฐ์ด ๊ฑธ๋ ธ๋ ๋ฌธ์ ์ด๋ค. ์ค๋๋ง์ ๋ฌธ์ ํ์ด๋ฅผ ํด์ ๊ทธ๋ฐ๊ฐ ๋๊ฐ ๊ตณ์ด์๋ ๋๋. ์ด ๋ฌธ์ ์ ์นดํ ๊ณ ๋ฆฌ๋ '์ํ'๊ณผ '๊ตฌํ'์ด๋ค. '๊ฐ์ ์๋ฅผ ๋ฌดํํ ๊ณฑํด๋๊ฐ ์, ์ผ์ ์๋ฆฌ๋ ์ต๋ 4์ฃผ๊ธฐ๋ก ๊ฐ์ ์๊ฐ ๋ฐ๋ณต๋๋ค'๋ผ๋ ์ํ์ ์๋ฆฌ๋ฅผ ๊นจ๋ฌ์ผ๋ฉด ๋ฌธ์ ๋ ์ฝ๊ฒ ํ๋ฆฐ๋ค.
1. ๋ฌธ์
https://www.acmicpc.net/problem/1009
[๋ฌธ์ ]
์ฌ์ฉ์ด๋ ์ต์ ์ปดํจํฐ 10๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ด๋ ๋ ์ฌ์ฉ์ด๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ๋ ์ผ์ด ์๊ฒจ์ ๊ฐ ์ปดํจํฐ์ 1๋ฒ๋ถํฐ 10๋ฒ๊น์ง์ ๋ฒํธ๋ฅผ ๋ถ์ฌํ๊ณ , 10๋์ ์ปดํจํฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ์ดํฐ๋ค์ ์ฒ๋ฆฌํ๊ธฐ๋ก ํ์๋ค.
1๋ฒ ๋ฐ์ดํฐ๋ 1๋ฒ ์ปดํจํฐ, 2๋ฒ ๋ฐ์ดํฐ๋ 2๋ฒ ์ปดํจํฐ, 3๋ฒ ๋ฐ์ดํฐ๋ 3๋ฒ ์ปดํจํฐ, ... ,
10๋ฒ ๋ฐ์ดํฐ๋ 10๋ฒ ์ปดํจํฐ, 11๋ฒ ๋ฐ์ดํฐ๋ 1๋ฒ ์ปดํจํฐ, 12๋ฒ ๋ฐ์ดํฐ๋ 2๋ฒ ์ปดํจํฐ, ...
์ด ๋ฐ์ดํฐ์ ๊ฐ์๋ ํญ์ ab๊ฐ์ ํํ๋ก ์ฃผ์ด์ง๋ค. ์ฌ์ฉ์ด๋ ๋ฌธ๋ ๋ง์ง๋ง ๋ฐ์ดํฐ๊ฐ ์ฒ๋ฆฌ๋ ์ปดํจํฐ์ ๋ฒํธ๊ฐ ๊ถ๊ธํด์ก๋ค. ์ด๋ฅผ ์ํํด ์ฃผ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
[์ ๋ ฅ]
์ ๋ ฅ์ ์ฒซ ์ค์๋ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ๋ค์ ์ค๋ถํฐ ๊ฐ๊ฐ์ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ์ ์ a์ b๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ a < 100, 1 ≤ b < 1,000,000)
[์ถ๋ ฅ]
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ๋ง์ง๋ง ๋ฐ์ดํฐ๊ฐ ์ฒ๋ฆฌ๋๋ ์ปดํจํฐ์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ค.
[์์ ์ ๋ ฅ 1]
5
1 6
3 7
6 2
7 100
9 635
[์์ ์ถ๋ ฅ 1]
1
7
6
1
9
2. ํ์ด
[๋ฌธ์ ์ดํด]
1๋ฒ, 11๋ฒ, 21๋ฒ, 31๋ฒ, ... ํด์ ๋์๋ฆฌ(=์ผ์์๋ฆฌ)๊ฐ 1์ธ ๋ฐ์ดํฐ๋ค์ 1๋ฒ ์ปดํจํฐ๊ฐ ์ฒ๋ฆฌ.
2๋ฒ, 12๋ฒ, 22๋ฒ, 32๋ฒ, ... ํด์ ๋์๋ฆฌ(=์ผ์์๋ฆฌ)๊ฐ 2์ธ ๋ฐ์ดํฐ๋ค์ 2๋ฒ ์ปดํจํฐ๊ฐ ์ฒ๋ฆฌ.
3๋ฒ, 13๋ฒ, 23๋ฒ, 33๋ฒ, ... ํด์ ๋์๋ฆฌ(=์ผ์์๋ฆฌ)๊ฐ 3์ธ ๋ฐ์ดํฐ๋ค์ 3๋ฒ ์ปดํจํฐ๊ฐ ์ฒ๋ฆฌ.
...
9๋ฒ, 19๋ฒ, 29๋ฒ, 39๋ฒ, ... ํด์ ๋์๋ฆฌ(=์ผ์์๋ฆฌ)๊ฐ 9์ธ ๋ฐ์ดํฐ๋ค์ 9๋ฒ ์ปดํจํฐ๊ฐ ์ฒ๋ฆฌ.
10๋ฒ, 20๋ฒ, 30๋ฒ, 40๋ฒ, ... ํด์ ๋์๋ฆฌ(=์ผ์์๋ฆฌ)๊ฐ 0์ธ ๋ฐ์ดํฐ๋ค์ 10๋ฒ ์ปดํจํฐ๊ฐ ์ฒ๋ฆฌ.
์ฆ, ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ์๋ฉด, ๋ง์ง๋ง์ ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ์ ๋ฒํธ๋ฅผ ์๊ฒ ๋๊ณ , ํด๋น ๋ฐ์ดํฐ์ ๋์๋ฆฌ(=์ผ์์๋ฆฌ)๋ฅผ ์๊ฒ ๋๋ฉด, ๋ช ๋ฒ ์ปดํจํฐ๊ฐ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ง ์๊ฒ ๋๋ค.
∴ ์ ๋ ฅ๋ฐ์ดํฐ์ ๋์๋ฆฌ(=์ผ์์๋ฆฌ)๋ฅผ ์์๋ด๋ฉด ๋ฌธ์ ๋ ํ๋ฆฌ๊ฒ ๋๋ค.
[์ ๋ ฅ ๋ฐ์ดํฐ ํ์]
T๋ ํ ์ด์ค ์ผ์ด์ค์ ๊ฐ์. ์ฆ, ์ ๋ ฅ ๋ฐ์ดํฐ์ ๊ฐ์์ด๋ค.
a๋ ๋ฐ.
b๋ ์ง์.
∴ $a^b$๊ฐ์ ๋์๋ฆฌ(=์ผ์์๋ฆฌ)๋ฅผ ์์๋ด๋ฉด ๋๋ค.
[์ง๊ด์ ์ธ ํ์ด1] = ์ค๋ฒํ๋ก์ฐ(Overflow) ๋ฐ์.
(int)pow(a,b) % 10
๋จ์ํ๊ฒ, math.h ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์กด์ฌํ๋ pow() ํจ์๋ฅผ ์ด์ฉํ์ฌ $a^b$๊ฐ์ ๊ตฌํ๊ณ , ํด๋น๊ฐ์ ๋์๋ฆฌ(=์ผ์์๋ฆฌ)๋ฅผ ๊ตฌํ๋ฉด ์ด๋จ๊น? a์ ์ต๋๊ฐ์ 99, b์ ์ต๋๊ฐ์ 999,999 ์ด๋ฏ๋ก pow(99, 999999)์ ๊ฐ์ ๊ฑฐ์ $100^{10^6}$์ผ๋ก ๊ทธ ๊ฐ์ด ์ด๋ง๋ฌด์ํ๊ฒ ์ปค์ง๋ค. ์ด๋ ํน์ ์๋ฃํ์ด ๊ฐ๋นํ ์ ์๋ ํฌ๊ธฐ์ ๋ฐ์ดํฐ๊ฐ ์๋๋ฏ๋ก, ์ปดํจํฐ๋ ์ค๋ฒํ๋ก์ฐ(Overflow) ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๊ฒ ๋๋ค.
[์ง๊ด์ ์ธ ํ์ด2] = ์๊ฐ๋ณต์ก๋ O(n). ์ด ๋ฐฉ์์ผ๋ก ํ๊ฒ๋๋ฉด ์๊ฐ์ด๊ณผ๋ก ์ค๋ต ์ฒ๋ฆฌ๋๋ค.
#pragma warning(disable:4996) //visual studio scanf ์ค๋ฅ ๋ฐฉ์ง.
#include <stdio.h>
int get_units(int a, int b) {
int units = a % 10;
for (int i = 1; i < b; i++)
units = (units * a) % 10;
/*
units = ( units * (a%10) ) % 10
์ ์์ผ๋ก ๊ณ์ฐํด๋ ๋๋ค.
*/
return units;
}
int main(int argc, char* argv[]) {
/* ๋ณ์์ ์ธ */
int a, b, T;
/* ์
๋ ฅ๊ฐ ๋ฐ์ ํ ์ฐ์ฐ */
scanf("%d", &T);
for (int i = 0; i < T; i++) {
scanf("%d %d", &a, &b);
printf("%d\n", get_units(a, b) == 0 ? 10 : get_units(a, b));
}
return 0;
}
์ ์ฝ๋์์ get_units(int a, int b) ํจ์๋ a์ b๋ฅผ ์ ๋ ฅ๊ฐ์ผ๋ก ๋ฐ์, $a^b$์ ๋์๋ฆฌ(=์ผ์์๋ฆฌ) ์๋ฅผ ๋ฐํํด ์ฃผ๋ ํจ์์ด๋ค.
[์ง๊ด์ ์ธ ํ์ด1]์์ ๋ฐ์ํ ์ค๋ฒํ๋ก์ฐ ๋ฐฉ์ง๋ฅผ ์ํด, %10 ์ฐ์ฐ์ ํตํด ๊ฐ์ ํฌ๊ธฐ๋ฅผ ์ค์ฌ์ฃผ๊ณ ์๋ค. ๋ค๋ง, ์ด ๋ฐฉ์์ ๊ฒฝ์ฐ ๋ณ์ b์ ๋ํด O(n)์ ์ ํ์ ์ธ ์๊ฐ๋ณต์ก๋๋ฅผ ์ง๋๋ค. ์ฆ, b์ ํฌ๊ธฐ๊ฐ ์ปค์ง ๊ฒฝ์ฐ ์๊ฐ๋ณต์ก๋๋ ๊ทธ์ ๋น๋กํ์ฌ ์ฆ๊ฐํ๋ค.
์ญ์๋ ์ ํ์ด๋๋ก ๋ฐฑ์ค์ ์ฑ์ ์ ์์ฒญํ ๊ฒฐ๊ณผ, ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
O(n)์์ ์๊ฐ๋ณต์ก๋๋ฅผ ๋์ฑ ์ค์ฌ์ผ ํ๋๋ฐ, ์๋ ์์ ํ ์ํ์ ์๋ฆฌ๋ฅผ ์ด์ฉํ๋ O(1) ์์์๊ฐ ๋ด๋ก ๋ฌธ์ ๊ฐ ํ๋ ธ๋ค.
[์ ๋ต] = ์๊ฐ๋ณต์ก๋ O(1)
๊ณ ๋ฏผ์ ํด๋ณด์. ์ฐ๋ฆฌ๊ฐ ๊ตฌํด์ผ ํ ๊ฐ์ $a^b$์ ๋์๋ฆฌ(=์ผ์์๋ฆฌ) ์ด๋ค.
$a^b$๋ a๋ ๊ฐ์ b๋ฒ ๊ณฑํ์ ๋ ์ป์ด์ง๋ ์์ด๋ค, b๋ฒ์ ๊ณฑ์ ์ ๋ฐ๋ณตํ์ ๋, ์ผ์์๋ฆฌ ์์ ๋ณํ์๋ ๊ท์น์ด ์กด์ฌํ ๊น?
[b%4=1] 1๋ฒ, 5๋ฒ, 9๋ฒ, .. |
[b%4=2] 2๋ฒ, 6๋ฒ, 10๋ฒ, .. |
[b%4=3] 3๋ฒ, 7๋ฒ, 11๋ฒ, .. |
[b%4=0] 4๋ฒ, 8๋ฒ, 12๋ฒ, .. |
|
์ผ์์๋ฆฌ = 0 | 0 | 0 | 0 | 0 |
์ผ์์๋ฆฌ = 1 | 1 | 1 | 1 | 1 |
์ผ์์๋ฆฌ = 2 | 2 | 4 | 8 | 6 |
์ผ์์๋ฆฌ = 3 | 3 | 9 | 7 | 1 |
์ผ์์๋ฆฌ = 4 | 4 | 6 | 4 | 6 |
์ผ์์๋ฆฌ = 5 | 5 | 5 | 5 | 5 |
์ผ์์๋ฆฌ = 6 | 6 | 6 | 6 | 6 |
์ผ์์๋ฆฌ = 7 | 7 | 9 | 3 | 1 |
์ผ์์๋ฆฌ = 8 | 8 | 4 | 2 | 6 |
์ผ์์๋ฆฌ = 9 | 9 | 1 | 9 | 1 |
์ ํ๋ฅผ ํตํด '๊ฐ์ ์๋ฅผ ๋ฌดํํ ๊ณฑํด๋๊ฐ ์, ์ผ์์๋ฆฌ๋ ์ต๋ 4์ฃผ๊ธฐ๋ก ๊ฐ์ ์๊ฐ ๋ฐ๋ณต๋๋ค' ๋ผ๋ ์ฌ์ค์ ๊นจ๋ฌ์ ์ ์๋ค.
๋ฐ๋ผ์, ์ ํ์ ๊ฐ์ ๋ฐฐ์ด์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋ ํ, a์ b์ ์ ์ ํ ์ฐ์ฐ์ ํตํด ๊ฐ์ ์๋ก ๋งค์นญ์ํค๋ฉด O(1)์ ์๊ฐ ๋ด๋ก ๋ฌธ์ ๊ฐ ํ๋ฆฌ๊ฒ ๋๋ค.
๋จ, ์ ๋ต ์ฝ๋์ ๋ง๋ค์ด๋ ํ ์ด๋ธ = table[10][4] ์ ๊ฐ์ด ๋ค์๊ณผ ๊ฐ์ ํํ๋ก ์ ์ฅ๋จ์ ์ ์ ๋ฐ๋๋ค.
[b%4=0] 4๋ฒ, 8๋ฒ, 12๋ฒ, .. |
[b%4=1] 1๋ฒ, 5๋ฒ, 9๋ฒ, .. |
[b%4=2] 2๋ฒ, 6๋ฒ, 10๋ฒ, .. |
[b%4=3] 3๋ฒ, 7๋ฒ, 11๋ฒ, .. |
|
์ผ์์๋ฆฌ = 0 | 0 [0][0] | 0 [0][1] | 0 [0][2] | 0 [0][3] |
์ผ์์๋ฆฌ = 1 | 1 [1][0] | 1 [1][1] | 1 [1][2] | 1 [1][3] |
์ผ์์๋ฆฌ = 2 | 6 [2][0] | 2 ... | 4 | 8 |
์ผ์์๋ฆฌ = 3 | 1 [3][0] | 3 | 9 | 7 |
์ผ์์๋ฆฌ = 4 | 6 [4][0] | 4 | 6 | 4 |
์ผ์์๋ฆฌ = 5 | 5 [5][0] | 5 | 5 | 5 |
์ผ์์๋ฆฌ = 6 | 6 [6][0] | 6 | 6 | 6 |
์ผ์์๋ฆฌ = 7 | 1 [7][0] | 7 | 9 | 3 |
์ผ์์๋ฆฌ = 8 | 6 [8][0] | 8 | 4 | 2 |
์ผ์์๋ฆฌ = 9 | 1 [9][0] | 9 | 1 | 9 |
[์ฃผ์ํ ์ ]
์ผ์ ์๋ฆฌ ์๊ฐ 0์ด๋ผ๋ฉด, ์ด๋ 10๋ฒ์งธ ์ปดํจํฐ๊ฐ ์ฒ๋ฆฌํ๋ ๊ฐ์ด๋ค. 0๋ฒ์งธ ์ปดํจํฐ๊ฐ ์ฒ๋ฆฌํ๋ ๊ฐ์ด ์๋๋ค...์ด๊ฒ ๋๋ฌธ์ ๋ช ๋ฒ ํ๋ ธ๋ค. ์กฐ์ฌํ์.
3. ์ฝ๋
#pragma warning(disable:4996) //visual studio scanf ์ค๋ฅ ๋ฐฉ์ง.
#include <stdio.h>
int table[10][4]; //ํ
์ด๋ธ ๋ง๋ค๊ธฐ
int power(int a, int b) { //๊ฑฐ๋ญ์ ๊ณฑ ํจ์
if (b == 0)
return 1;
else
return power(a, b - 1) * a;
}
void make_table(void) { //ํ
์ด๋ธ ์ฑ์๋ฃ๊ธฐ
for (int i = 0; i < 10; i++)
for (int j = 1; j <= 4; j++)
table[i][j % 4] = (int)power(i, j) % 10;
/*
math.h์ pow()๋ฅผ ์ด์ฉํ์ฌ,
table[i][j % 4] = (int)pow(i, j) % 10;
์ผ๋ก ๊ตฌํํด๋ ๋๋ค.
(math.h ํจ์๋ ๋ฐํํ์ด double์ด๋ฏ๋ก, int๋ก ํ๋ณํ ํด์ค๋ค.)
*/
}
int main(int argc, char* argv[]) {
/* ๋ณ์์ ์ธ */
int a, b, T;
/* ํ
์ด๋ธ ๋ง๋ค๊ธฐ */
make_table();
/* ์
๋ ฅ๊ฐ ๋ฐ์ ํ ์ฐ์ฐ */
scanf("%d", &T);
for (int i = 0; i < T; i++) {
scanf("%d %d", &a, &b);
printf("%d\n", table[a % 10][b % 4] == 0 ? 10 : table[a % 10][b % 4]);
}
return 0;
}
'ใโจ๏ธแดsใPS > ๋ฐฑ์ค_์ํ&๊ตฌํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon/๋ฐฑ์ค][10807][C/C++] ๊ฐ์ ์ธ๊ธฐ (0) | 2023.01.18 |
---|---|
[Baekjoon/๋ฐฑ์ค][1110][C/C++] ๋ํ๊ธฐ ์ฌ์ดํด (0) | 2023.01.17 |
[Baekjoon/๋ฐฑ์ค][25304][C/C++] ์์์ฆ (0) | 2023.01.17 |
[Baekjoon/๋ฐฑ์ค][3003][C/C++] ํน, ํธ, ๋ฃฉ, ๋น์, ๋์ดํธ, ํฐ (0) | 2023.01.16 |
[Baekjoon/๋ฐฑ์ค][1008][C/C++] A/B (0) | 2023.01.16 |