본문 바로가기

PS/BOJ

[백준] 2561번 세 번 뒤집기

반응형

문제 : https://www.acmicpc.net/problem/2561

 

문제요약 : 수열의 구간 (xi,yi)를 순차적으로 뒤집어 원래 수열로 만들 때, xi,yi(i=1~3) 를 출력하라

 

조건 :

1. 정수 N (5≤N≤1000)

2. 구간[i,i]를 뒤집으면 아무런 변화가 없는데 이러한 것도 허용이 된다.

 

해설 :

주어진 수열의 부분수열을 뒤집는 행위를 세 번 반복하여 1, 2, ... ,N이 되는 수열로 만드는 문제다.

 

조건 2를 보면 굳이 세 번 뒤집을 필요가 없음을 알 수 있다.

즉, 두 번 뒤집고 1,1을 뒤집거다 한 번 뒤집고 1,1을 두번 뒤집으면 되는 것이다.

 

우선 처음 수열이 1씩 증가하는 수열이기때문에 이 수열을 세 번 뒤집으면

1씩 증가하거나 1씩 감소하는 부분이 k개 생긴다.

예제에서 6 7 8 2 1 9 3 4 5 10 인데

6 7 8 | 2 1 | 9 | 3 4 5 | 10 이렇게 나눌 수 있다는 것이다.

이때 k는 7보다 작거나 같다 (세 번 뒤집었으니까!)

 

즉 구간이 최대 7개 나온다는 것은

(7C2)^3만에 모든 구간을 다 뒤집어 볼 수 있다는 말이 된다.

=> 백트래킹으로 답을 구해보도록 하자

 

https://www.acmicpc.net/board/view/13587

https://www.acmicpc.net/board/view/1798

데이터를 추가해서 확인해보자.

백트래킹으로 답이 안나오는 경우인데, 이는 구간을 잘못 나눠줘서 그렇다.

정 귀찮으면 한 번 뒤집어놓고 백트래킹 돌리는 것도 한가지 방법이고,

1개짜리 구간을 따로 설정해두어 보는 것도 한가지 방법이 될 듯 하다.

반응형

'PS > BOJ' 카테고리의 다른 글

[백준] GCD 곱  (0) 2019.09.23
[백준] 7대 난제 클리어  (1) 2019.09.18
[백준] 플립과 시프트  (0) 2019.07.14
[백준] Xor Sum  (0) 2019.05.23
[백준] 1604번 정사각형 자르기  (0) 2019.02.25