본문 바로가기

백준

[ 백준 27468 ] 2배 또는 0.5배 (c/c++)

https://www.acmicpc.net/problem/27468

 

 

[ 문제 요약 ]

정수 N이 주어질 때 1 ~ N까지의 수를 임의의 인접한 세 수 Aₐᵢ, Aₐᵢ₊₁, Aₐᵢ₊₂에 대해 Aₐᵢ₊₁ - Aₐᵢ = Aₐᵢ₊₂ - Aₐᵢ₊₁ × 2 또는 Aₐᵢ₊₁ - Aₐᵢ = Aₐᵢ₊₂ - Aₐᵢ₊₁ × 0.5 조건에 맞는 수열로 출력한다.

 

 

[ 문제 풀이 ]

1. 이 문제의 경우 무조건 수열을 만들 수 있기 때문에 만들 수 있는 지 검증하지 않아도 된다.

2. N % 4 == 2 인 경우 2 + 4x, 1 + 4x, 3 + 4x, 4 + 4x 를 반복해서 출력한다.

3. 그 이외의 경우에는 1 + 4x, 3 + 4x, 2 + 4x, 4 + 4x 를 반복해서 출력한다.

 

 

[ 소스 코드 ]

#include <bits/stdc++.h>
using namespace std;

int N;

int main() {
    cin >> N;
    cout << "YES" << "\n";

    if (N % 4 == 2){
        for (int i=0; i<N; i++){
            if (i % 4 == 0) cout << (i + 2);
            if (i % 4 == 1) cout << i;
            if (i % 4 == 2) cout << (i + 1);
            if (i % 4 == 3) cout << (i + 1);
            cout << " ";
        }
    }
    else {
        for (int i=0; i<N; i++){
            if (i % 4 == 0) cout << (i + 1);
            if (i % 4 == 1) cout << (i + 2);
            if (i % 4 == 2) cout << i;
            if (i % 4 == 3) cout << (i + 1);
            cout << " ";
        }
    }
    
    return 0;
}

 

 

 

[ 주의할 점 ]

에드훅 문제이기 때문에 4에서 부터 하나하나 늘려가면서 규칙을 찾아가면서 풀 수 있다.