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 |