※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 25184번 문제인 동가수열 구하기이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/25184
25184번: 동가수열 구하기
수열 $[2, 4, 1, 3]$은 $1$ 이상 $4$ 이하인 정수로 이루어져 있고, 모든 원소가 서로 다르다. 또한, 이웃한 원소의 차가 모두 $\lfloor \frac{4}{2} \rfloor$ $=$ $2$ 이상이다. 따라서 수열 $[2, 4, 1, 3]$은 동가
www.acmicpc.net
두 번째 예제와 비슷한 방식으로 항상 동가수열을 만들 수 있다.
항상 인접한 두 수의 차는 floor(N/2) 이상이어야 하므로, 인접한 두 수는 (대략) 주어진 수열의 중앙을 기준으로 왼쪽 수와 오른쪽 수가 번갈아 나올 것이라는 직관을 이용하면 동가수열중 하나를 쉽게 찾아낼 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N; cin >> N;
if (N & 1) {
int mid = (N + 1) / 2;
cout << mid;
for (int i = N; i > mid; i--) cout << ' ' << i << ' ' << i - mid;
}
else {
int mid = N / 2;
for (int i = N; i > mid; i--) cout << i-mid << ' ' << i << ' ';
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 25186 // C++] INFP 두람 (0) | 2022.08.14 |
---|---|
[BOJ 25185 // C++] 카드 뽑기 (0) | 2022.08.14 |
[BOJ 4850 // C++] Baskets of Gold Coins (0) | 2022.08.14 |
[BOJ 6132 // C++] 전화선 (0) | 2022.08.14 |
[BOJ 6494 // C++] Another lottery (0) | 2022.08.14 |