문제
- 문제 링크
BOJ 28426 - 더하기와 나누기
수열의 원소는 모두 다르고 $2$ 이상 $10^6$ 이하의 정수이다. $1$ 이상 $N$ 이하의 모든 정수 $i$에 대해서, $A_i$가 $A_1 + A_2 + ... + A_N$의 약수가 되는 정수 $i$는 정확히 $1$개이다.
$N$이 주어지면, 위 조건을 만족하는 수열을 아무거나 하나 구해보자.
TL : $1$ sec, ML : $1024$ MB
$1 ≤ N ≤ 10^5$
알고리즘 분류
- 해 구성하기 (constructive)
풀이
홀수와 짝수에 집중해보면 된다.
$N-1$개의 짝수와, $1$개의 홀수로 수열을 구성하는 것을 생각하자.
홀수의 기준을 $3$으로 잡으면, 다음과 같이 진행되는 수열을 만들어 볼 수 있다.
$3$ $2$ $4$ $6$ $8$ $10$ $...$
한가지 유의 사항으로, 단순히 위처럼 답을 내면 $N$을 $3$으로 나눈 나머지가 $2$일 때 $A_1 + A_2 + ... + A_N$가 $3$으로 나누어 떨어지지 않는 경우가 발생한다.
이를 테면 $N = 2, 5, 8, ...$과 같은 상황이다.
결과적으로 이 경우에선, $A_N$에 $4$를 더해줌으로써 해결할 수 있다.
전체 코드
1 2 3 4 5 6 7 8 9 10 11 | #include<bits/stdc++.h> int main() { int n, i(2); scanf("%d", &n); printf("3 "); for (int _n(n - 1); --_n > 0; i += 2) printf("%d ", i); if (n > 1) printf("%d", i + (n % 3 == 2 ? 4 : 0)); } | cs |
comment
끝
'Problem Solving > Baekjoon Online Judge (Gold)' 카테고리의 다른 글
백준 23792 - K번째 음식 찾기 2 (C++) (0) | 2023.08.09 |
---|---|
백준 28421 - 곱하기와 쿼리 (C++) (0) | 2023.08.05 |
백준 28422 - XOR 카드 게임 (C++) (0) | 2023.07.31 |
백준 28333 - 화이트 칼라 (C++) (0) | 2023.07.20 |
백준 14757 - Dueling Philosophers (C++) (1) | 2023.07.16 |