직사각형 && 약 팔기
문제
풀이
날먹문제집? 시리즈에 있어서 넌센스 겸으로 풀어봤다.
애드 훅이지만 다행히도 풀이가 간단하게 생각나서 쉽게 푼 것 같다.
이제 붙어 있는 값을 더해서 1~1000000 까지의 숫자를 만들 수 있으면 된다.
처음에는 2진수로 1 2 4 1 2 4 8 … 이런식으로 하면 되지 않을까? 했는데 아무래도 무리다.
생각을 바꿔서 천진수의 수로 접근을 했다.
1 1 1 … 1 천개 1000 …. 1000 천개를 연결하면 된다.
문제
풀이
위 문제와 똑같은 아이디어를 공유한다.
30x30 사각형이니까 15진법을 이용할 수 있다.
1을 14개, 15를 14개, 225를 14개 3375를 14개를 십자가 모양으로 펼치면 더할 수 있다.
그러면 최대로 표현할 수 있는 수는 3375*15 -1 이므로 50624까지 가능하다.
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
#include <iostream>
#include <vector>
#include <string>
#include <functional>
#include <queue>
#include <set>
#include <algorithm>
#include <math.h>
using namespace std;
int main()
{
ios_base ::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int a, b, c;
int n, m, t;
for (int i = 0; i < 30; i++) {
for (int j = 0; j < 30; j++){
if(i<15&&j==15)cout << 1 << ' ';
else if(i>15&&j==15)cout << 15 << ' ';
else if(i==15&&j<15)cout << 225 << ' ';
else if(i==15&&j>15)cout << 3375 << ' ';
else cout << 0 << ' ';
}
cout << '\n';
}
return 0;
}
재밌는 아이디어네요.