ALGORITHM/C++ algorithm

[백준 8741번] 2진수의 합

호이호이호잇 2018. 11. 15. 17:50
728x90
반응형

너무너무 화난다..

문제를 봤을때, 엄청 쉽고 간단해보여서 종이에 안적고 그냥 풀었더니 엄청 막혀서 틀리고 틀렸다.



#문제


#풀이


멍청한 방법

먼저 내가 하고싶었던 쓰레기 방법은 


[1] 숫자를 입력받고

[2] 입력받은 숫자를 2의 배수로 만들어준다.

[3] 2의 배수 전까지 숫자를 모두 더해준다.

[4] 더해준 숫자에 관한 것을 2진수로 바꿔준다.


이것이였다.

하지만 메모리초과, 런타임에러 등의 모든 에러를 경험해서 틀린방법임을 깨닫고, 경우의 수를 적어보았다.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include<iostream>
#include<stack>
 
using namespace std;
 
stack<int> stackfornumber;
 
void changetobinary(int _fin_number)
{
    while (_fin_number > 1)
    {
        stackfornumber.push(_fin_number % 2);
        _fin_number = _fin_number / 2;
    }
    stackfornumber.push(_fin_number);
}
int main()
{
    int input;//입력 받을 숫자 변수
    int number=1// 숫자 범위를 정해줍니다. 2의 배수이니까 1로 처음 값을 지정해줍니다. -> 1자리면 0~1 / 2자리면 0~3 / 3자리면 0~7
    
    cin >> input; // 숫자를 입력받습니다.
 
    for (int i = 0; i < input; i++// 숫자의 범위를 지정해주기 위해 자리 수 만큼 2를 곱해줍니다.
    {
        number = number * 2;
    }
 
    int fin_number = 0// 2진수로 바꾸기 전 범위 안에 모든 수를 더해준 최종 값.
    
    number--// 2의 배수는 포함하지 않아야하여, 1을 빼줍니다.
 
    while (number) // 최종 수로 만들어주기 위해 number 전체를 더해줍니다. 
    {
        fin_number = fin_number + number;
        number--;
    }
 
    changetobinary(fin_number);
 
    int size = stackfornumber.size();
    int popnumber = 0;
 
    for (int i = 0; i < size; i++)
    {
        cout << stackfornumber.top();
        stackfornumber.pop();
    }
    cout << endl;
    return 0;
}
cs



좀 더 똑똑하게 생각하기

똑똑하게 생각하기 위해 규칙이 필요하다.

규칙을 찾기 위해 각 입력 받을 숫자 별 출력할 2진수를 정리해보았다.

이것을 보니 방법을 찾을 수 있었다.

입력 받을 숫자 만큼의 1 과 입력 받은 숫자-1 만큼의 0을 출력하면 되는 것!!!!

충격과 너무 허무해서 나의 멍청함에.... 충격..


https://github.com/leehy0321/algorithm_study/blob/master/Baekjoon/8741.cpp

-코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
 
using namespace std;
 
int main()
{    
    int input;
 
    cin >> input;
 
    for (int i = 0; i < input; i++)
    {
        cout << 1;
    }
    for (int i = 0; i < input - 1; i++)
    {
        cout << 0;
    }
 
    cout << endl;
    return 0;
}
cs



이렇게 많은 시도를 하다니..

멍청멍청 ㅠㅠㅠ


728x90
반응형

'ALGORITHM > C++ algorithm' 카테고리의 다른 글

[백준 6246] 풍선놀이  (0) 2018.11.14
<백준 온라인저지 1463번> 1로 만들기 (DP 예제)  (0) 2018.10.26