[백준/BOJ] 백준 15738번 : 뒤집기
2023. 10. 13. 14:32ㆍ알고리즘 문제풀이
https://www.acmicpc.net/problem/15738
각 연산에 따라 기존 k의 위치가 어디로 움직이는지만 확인하여 문제를 해결했다
코드
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n, k, m;
int k_point; //k번째에 위치하던 숫자의 현재 위치
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> n >> k >> m;
k_point = k;
for (int i = 0; i < n; i++) {
int input;
cin >> input; //입력받고 사용하지는 않음
}
for (int i = 0; i < m; i++) {
int order;
cin >> order;
if (order > 0) { //양수일때
if (k_point <= order) { //확인하는 숫자에 영향을 줄때
int left = 1;
int right = order;
int mid = (left + right) / 2;
if (order % 2 == 1) {
if (k_point < mid) {
k_point = (mid - k_point) + mid;
}
else if (k_point > mid) {
k_point = mid - (k_point - mid);
}
}
else {
if (k_point <= mid) {
k_point = (mid - k_point) + mid + 1;
}
else if (k_point > mid) {
k_point = mid - (k_point - mid) + 1;
}
}
}
}
if (order < 0) { //음수일때
if (k_point >= n + order + 1) {//확인하는 숫자에 영향을 줄때
int left = n + order + 1;
int right = n;
int mid = (left + right) / 2;
if ((-order) % 2 == 1) {
if (k_point < mid) {
k_point = (mid - k_point) + mid;
}
else if (k_point > mid) {
k_point = mid - (k_point - mid);
}
}
else {
if (k_point <= mid) {
k_point = (mid - k_point) + mid + 1;
}
else if (k_point > mid) {
k_point = mid - (k_point - mid) + 1;
}
}
}
}
}
cout << k_point;
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 2232번 : 지뢰 (0) | 2023.10.13 |
---|---|
[백준/BOJ] 백준 24431번 : 유사 라임 게임 (0) | 2023.10.13 |
[백준/BOJ] 백준 7579번 : 앱 (0) | 2023.04.13 |
[백준/BOJ] 백준 5926번 : Cow Lineup (0) | 2023.04.13 |
[백준/BOJ] 백준 14907번 : 프로젝트 스케줄링 (0) | 2023.04.13 |