문제 : https://www.acmicpc.net/problem/27468
문제 요약
1~N 까지 정확히 한번 사용
인접한 세수 A, B, C가 |A-B| = |B-C| * 2 혹은 |A-B| = |B-C| * 0.5를 만족
문제 분류 : 애드혹
C++
소스코드 : https://github.com/cbkpar/BOJ/blob/main/boj_27468.cpp
채점 번호 | 아이디 | 문제 번호 | 결과 | 메모리 | 시간 | 언어 | 코드 길이 |
66934093 | cbkpar | 27468 | 100점 | 2020 KB | 200 ms | C++17 | 673 B |
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int iN;
cin >> iN;
cout << "YES" << "\n";
if (iN % 4 == 2)
{
for (int i = 1; i <= iN; ++i)
{
if (i % 4 == 1) cout << (i + 1);
if (i % 4 == 2) cout << (i - 1);
if (i % 4 == 3) cout << i;
if (i % 4 == 0) cout << i;
cout << (i == iN ? "\n" : " ");
}
}
else
{
for (int i = 1; i <= iN; ++i)
{
if (i % 4 == 1) cout << i;
if (i % 4 == 2) cout << (i + 1);
if (i % 4 == 3) cout << (i - 1);
if (i % 4 == 0) cout << i;
cout << (i == iN ? "\n" : " ");
}
}
return 0;
}
문제 풀이
주어진 N을 4 단위로 생각한다.
주어진 N을 4로 나머지연산했을 때 2인 경우
2+4x, 1+4x, 3+4x, 4+4x (x = 0,1,2,3,...)를 반복해서 출력한다.
-> [2 1 3 4] [6 5 7 8] [10 9]
-> 간격 : 1 2 1 2 1 2 1 2 1 로 반복되게 된다.
주어진 N을 4로 나머지연산했을 때 2가 아닌경우
1+4x, 3+4x, 2+4x, 4+4x (x = 0,1,2,3,...)를 반복해서 출력한다.
-> [1 3 2 4] [5 7 6 8] [9 11 10 12]
-> 간격 : 2 1 2 1 2 1 2 1 2 1 2 로 반복되게 된다.
'백준온라인' 카테고리의 다른 글
[백준온라인] 6568번 귀도 반 로썸은 크리스마스날 심심하다고 파이썬을 만들었다 (0) | 2023.03.23 |
---|---|
[백준온라인] 27516번 과녁 맞추기 (0) | 2023.03.01 |
[백준온라인] 12933번 오리 (0) | 2021.10.13 |
[백준온라인] 2687번 팩스 받기 (0) | 2021.10.13 |
[백준온라인] 2686번 팩스 (0) | 2021.10.13 |