티스토리 뷰
728x90
문제 링크
2635번: 수 이어가기
첫 번째 수가 주어진다. 이 수는 30,000 보다 같거나 작은 양의 정수이다.
www.acmicpc.net
풀이
규칙이 주어집니다. 그에 따라 구현을 합시다.
두 번째 수로 $N$ 이상의 수를 선택하면 항상 바로 끝나게 되니 $N$ 이하의 모든 수에 대해 돌리면 됩니다.
정답 코드
#include <bits/stdc++.h>
#define ft first
#define sd second
#define INF 0x3f3f3f3f
using namespace std;
using vi = vector<int>;
int go(vi &p) {
int top = (int) p.size() - 1;
if (p.back() < 0) {
p.pop_back();
return top;
}
p.push_back(p[top - 1] - p[top]);
return go(p);
}
int main() {
int n;
cin >> n;
pair<int, vi> ans;
for (int i = 1; i <= n; i++) {
vi p(1, n);
p.push_back(i);
int val = go(p);
ans = max(ans, {val, p});
}
cout << ans.ft << endl;
for (int x: ans.sd) {
cout << x << ' ';
}
}
728x90
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[BOJ] 백준 2636 치즈 (KOI 2000 초등부) (2) | 2021.02.18 |
---|---|
[BOJ] 백준 1244 스위치 켜고 끄기 (KOI 2000 초등부) (0) | 2021.02.18 |
[BOJ] 백준 2643 색종이 올려 놓기 (KOI 1999 초등부) (1) | 2021.02.18 |
[BOJ] 백준 2642 전개도 (KOI 1999 초등부) (0) | 2021.02.18 |
[BOJ] 백준 2641 다각형그리기 (KOI 1999 초등부) (0) | 2021.02.18 |
댓글