알고스팟 문제 링크: https://algospot.com/judge/problem/read/SORTGAME
algospot.com :: SORTGAME
Sorting Game 문제 정보 문제 중복이 없는 정수 수열이 주어진다. 이 때, 우리는 이 수열의 임의의 구간을 선택해서 해당 구간을 뒤집을 수 있다. 이 뒤집기 연산을 통해 전체 수열을 정렬하고 싶다.
algospot.com
중복이 없는 정수 수열에 임의의 구간을 선택해서 뒤집는 작업을 반복하여 수열을 정렬시킨다 했을때 필요한 최소 뒤집기 횟수를 구하는 문제이다.
상대적 크기가 같은 배열의 최소 뒤집기 횟수는 같다.
예를들어 {1, 3, 2, 4}와 {10, 30, 20, 40}의 최소 뒤집기 횟수는 같다. 따라서 크기가 n인 수열은 원소가 1~n인 경우만 고려하면 된다.
수열의 배치가 다른 각각의 경우의 수는 n!이므로 n!개의 정점과 현재 상태에서 뒤집기 한번 했을때의 수열이 서로 연결된 형태의 그래프를 이용하여 문제를 풀 수 있다.
이때 테스트케이스의 최대가 1000이므로 크기가 1~n인 경우들의 최소 뒤집기 횟수들을 미리 구해놓는다.
코드 원본: https://github.com/sbl133/JongmanBook/blob/main/29.%20BFS/SORTGAME.cpp
GitHub - sbl133/JongmanBook
Contribute to sbl133/JongmanBook development by creating an account on GitHub.
github.com
댓글을 통한 코드리뷰, 질문, 지적 언제든 환영입니다!
reference: 프로그래밍 대회에서 배우는 알고리즘 문제해결전략2
'Algorithm > algospot' 카테고리의 다른 글
algospot 하노이의 탑 (문제 ID: HANOI4B) c++ (0) | 2021.10.29 |
---|---|
algospot 어린이날 (문제 ID: CHILDRENDAY) c++ (0) | 2021.10.28 |
algospot 단어 제한 끝말잇기 (문제 ID: WORDCHAIN) c++ (0) | 2021.10.22 |
algospot 고대어 사전 (문제 ID: DICTIONARY) c++ (0) | 2021.10.21 |
algospot 에디터 전쟁 (문제 ID: EDITORWARS) c++ (0) | 2021.10.18 |