본문 바로가기

알고리즘

Atcoder Regular 110 F - Esoswap

atcoder.jp/contests/arc110/tasks/arc110_f

 

F - Esoswap

AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

atcoder.jp

 

구성적 문제인데 감탄스러워서 적어봅니다.

 

문제 해결 방법은 두 가지 관찰이 필요합니다.

 

1. $ N $ 과 $ N - 1 $ 은 서로소이고 서로소이면 어떤 인덱스에 있든 아무 인덱스로 갈 수 있습니다.

2. $ X $ 의 수가 $ X $ 인덱스로 가기 위해선 $ 0 $ 번째 인덱스에 위치해야 갈 수 있습니다.

 

이 두 가지 관찰을 잘 이용해봅시다.

 

그럼 처음 $ N - 1 $ 수를 $ N - 1 $ 에 옮길 수 있습니다.

그리고 $ N - 2 $ 를 계속 움직인다고 가정하겠습니다.

그럼 이 수는 인덱스가 2 씩 증가하도록 오른쪽으로 움직이게 됩니다.

즉 $ N - 1 $ 인덱스를 거치지 않으면 $ N - 2 $ 에 항상 갈 수 있으며

$ N - 1 $ 인덱스를 거친다고 가정했을 때 $ N - 2 $ 가 $ N - 1 $ 이랑 스왑이 되고

$ N - 1 $ 수가 자기자리를 다시 되찾기 위해서 움직이고 움직이다 $ 0 $ 번째 위치에서 $ N - 2 $ 수랑 스왑되게 됩니다.

그럼 $ N - 2 $ 수가 $ 0 $ 번째 인덱스로 가게 되고 여기서 한번 움직이면 $ N - 2 $ 인덱스로 가게 됩니다.

 

$ N - 3 $ 부터 $ 0 $ 까지 동일한 작업을 계속 해주면 됩니다.

 

'알고리즘' 카테고리의 다른 글

boj 20641. Sleeping Cows  (0) 2021.04.06
DSU tree  (0) 2020.10.04
백준 1536번 Dance, Dance  (0) 2020.09.23
조금 신기한 분할정복  (0) 2020.09.13
SCPC 3회 1차 2차 예선 풀이  (1) 2020.08.31