반응형
https://www.acmicpc.net/problem/17497
17497번: 계산기
첫 번째 줄에 버튼을 누른 횟수 K (0 ≤ K ≤ 99) 를 출력합니다. 누른 횟수를 최소화 하지 않아도 됩니다. 단, 누른 횟수가 99번을 넘으면 안됩니다. 만약 99번 안에 N을 만드는 방법이 존재하지 않는
www.acmicpc.net
[ 문제풀이 ]
1. N에서부터 시작해 연산을 해주고 ans vector에 push 해줍니다.
2. 만약 N & 1일 경우 무조건 나눈 경우이므로 ans에 '/'를 push 하고 나누기 전 값인 N *= 2를 해줍니다.
3. 만약 N & 2일 경우 무조건 2를 더한 경우이므로 ans에 '+'를 push 하고 더하기 전 값이 N -= 2를 해줍니다.
4. 만약 2, 3 둘 다 아닐 경우 2를 곱한 경우이므로 ans에 '*'를 push 하고 곱하기 전 값인 N /= 2를 해줍니다.
5. N이 0이 되면 반복문을 탈출합니다.
6. ans에 추가된 연산자를 뒤에서부터 출력해 줍니다.
[ 소스코드 ]
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 | #include<iostream> #include<vector> #define ll long long using namespace std; ll N; vector<char> ans; int main() { scanf("%lld", &N); while (N) { if (N & 1) { //무조건 2로 나눈 경우 ans.push_back('/'); N *= 2; } else if (N & 2) { //무조건 2를 더한 경우 ans.push_back('+'); N -= 2; } else { //무조건 2를 곱한 경우 ans.push_back('*'); N /= 2; } } if (ans.size() > 99) { printf("-1"); } else { printf("%d\n", ans.size()); for (int i = ans.size() - 1; i >= 0; i--) { printf("[%c] ", ans[i]); } } } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 12837번 - 가계부 (Hard) (C++) (0) | 2023.01.01 |
---|---|
[ 백준 ] 17244번 - 아맞다우산 (C++) (0) | 2022.12.31 |
[ 백준 ] 2268번 - 수들의 합 7 (C++) (0) | 2022.12.29 |
[ 백준 ] 1194번 - 달이 차오른다, 가자. (C++) (0) | 2022.12.28 |
[ 백준 ] 2589번 - 보물섬 (C++) (0) | 2022.12.27 |