Home 직사각형(19568, P2, c++), 약 팔기(15311, P5, c++)
Post
Cancel

직사각형(19568, P2, c++), 약 팔기(15311, P5, c++)

직사각형 && 약 팔기

직사각형
약 팔기

문제

image

풀이

날먹문제집? 시리즈에 있어서 넌센스 겸으로 풀어봤다.
애드 훅이지만 다행히도 풀이가 간단하게 생각나서 쉽게 푼 것 같다.

이제 붙어 있는 값을 더해서 1~1000000 까지의 숫자를 만들 수 있으면 된다.
처음에는 2진수로 1 2 4 1 2 4 8 … 이런식으로 하면 되지 않을까? 했는데 아무래도 무리다.

생각을 바꿔서 천진수의 수로 접근을 했다.
1 1 1 … 1 천개 1000 …. 1000 천개를 연결하면 된다.

문제

image

풀이

위 문제와 똑같은 아이디어를 공유한다.
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;
}

재밌는 아이디어네요.

This post is written by PRO.

빙고(17106, P5, c++)

-