Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Codeforces
- livedata
- 코드포스
- 백준
- activity
- architecture
- Coroutines
- MyVoca
- GitHub
- androidStudio
- MiTweet
- relay
- ProGuard
- Gradle
- pandas
- 프로그래머스
- 암호학
- android
- 코루틴
- Kotlin
- 쿠링
- Compose
- AWS
- textfield
- TEST
- Coroutine
- Rxjava
- boj
- Python
- Hilt
Archives
- Today
- Total
이동식 저장소
1039. 교환 본문
숫자의 배치 순서를 바꿔서 수를 최대로 만들어야 하는 문제이다.
무식하게 풀어보기
모든 가능한 $(i, j)$ 쌍을 바꿔 보는 방법을 생각해 볼 수 있다, 그러나 경우의 수가 최대 $\left(\begin{array}{c}7\\ 2\end{array}\right)^{10}=16,679,880,978,201$개나 있으므로 완전 탐색으로는 문제를 풀 수 없다.
그렇다면 기억해 보자
메모이제이션을 활용하여 중복 계산을 줄여 보자. 다음을 정의한다.
$ans(n, dep) = dep$번 교환하여 얻은 수가 $n$일 때, 교환을 완료하여 얻을 수 있는 최대의 수
교환 가능한 모든 쌍에 대하여 나머지 횟수만큼 교환한 결과를 모두 탐색하고, 최댓값을 저장한다. 이때 이전에 탐색한 결과가 있다면 중복 계산하지 않아야 한다.
$ans(n, dep) = \max(exchanged, n+1) $ $for$ $all$ $available$ $exchanged$
주의
다음의 교환이 가능하다.
100 → 100
풀고 나서 solved.ac 태그를 보고 조금 놀랐다. 이걸 어떻게 BFS로 풀지?
'Problem Solving > BOJ' 카테고리의 다른 글
17435. 합성함수와 쿼리 (0) | 2020.06.30 |
---|---|
3665. 최종 순위 (0) | 2020.06.21 |
3197. 백조의 호수 (0) | 2020.04.07 |
1103. 게임 (0) | 2020.04.01 |
1509. 팰린드롬 분할 (0) | 2020.03.29 |
Comments