문제
https://codeforces.com/problemset/problem/1487/B
걸린 시간
03 : 48 : 01
풀이
C++
#include <bits/stdc++.h>
#define INF 1e9
#define all(c) c.begin(), c.end()
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int tc;
cin >> tc;
while(tc--){
int n, k;
cin >> n >> k;
if(n%2 == 0) cout << (k-1)%n+1 << "\n";
else{
int A = n-1;
int B, remain;
int piece = k/n;
int cycle = n/2;
if(k <= n){
B = 0;
remain = k;
}
else{
if(k%n == 0){
B = (piece-1) % cycle * 2;
remain = n;
}
else{
B = piece % cycle * 2;
remain = k%n;
}
}
int fi = (A-B)/2;
int se = (n-1)/2;
if(remain < 1+fi) B += 0;
else if(remain < 1+fi+se) B += 1;
else B += 2;
cout << (B+remain-1)%n+1 << "\n";
}
}
return 0;
}
solution 도 빠르게 떠올리지 못했고, 인덱스의 차이도 잘 계산해내지 못해 풀이에 시간이 매우 오래 걸렸던 문제이다.
풀이 작성도 중요하지만 같은 문제를 풀 때 똑같이 어려움을 겪지 않도록 신경 써야 할 점들을 대신 기록하려고 한다.
- 구현을 하기 전, 문제에서 사용되는 변수들을 시작 값(0, 1)에 따라 나눌 필요가 있다.
- 나머지 연산
%
은 결과가 0 부터 나눈 수 - 1 까지 임을 기억해야한다. - 문제의 초기 상태를 잘 파악해야한다.
'Codeforces' 카테고리의 다른 글
Codeforces Round #706 (Div. 2) A (0) | 2021.03.11 |
---|---|
Codeforces #1486B Eastern Exhibition (0) | 2021.03.10 |
Codeforces #1493B Planet Lapituletti (0) | 2021.03.07 |
Codeforces Round #705 (Div. 2) A (0) | 2021.03.07 |
Codeforces #1491B Minimal Cost (0) | 2021.03.06 |
댓글