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
- 암호학
- Coroutines
- textfield
- TEST
- MyVoca
- livedata
- pandas
- Rxjava
- architecture
- Codeforces
- 코드포스
- Kotlin
- 백준
- Coroutine
- 쿠링
- Gradle
- ProGuard
- AWS
- 코루틴
- androidStudio
- Python
- relay
- activity
- android
- MiTweet
- 프로그래머스
- GitHub
- Compose
- Hilt
- boj
Archives
- Today
- Total
이동식 저장소
27979. 볼링장 아르바이트 본문
친구가 학교 대회에서 낸 문제이다.
27979번: 볼링장 아르바이트
건구스는 볼링장에서 아르바이트하고 있다. 건구스의 퇴근 전 마지막 업무는 $N$개의 볼링공의 순서를 볼링공의 무게 순서대로 정리하는 것이다. 즉, 모든 $i, j\ ( 1 \le i < j \le N )$ 에 대해 $w_i \le w
www.acmicpc.net
공을 뺄 때는 어디에서나 뺄 수 있지만, 넣을 때는 맨 앞에만 넣을 수 있다. 주어진 정수를 오름차순으로 정렬하려면 공을 최소 몇 번 빼야 하는지 구하면 된다.
어디선가 많이 본 세팅인데.. LIS 문제인가 싶어서 생각해 봤으나 아니었다. 정렬 말고는 딱히 알고리즘은 없는 듯하다.
예제를 관찰한 결과, $i$번 공 앞에 $i$번 공보다 큰 공 $j$가 있다면
- $i$번 공과
- $k<i$이면서 $w[k]<w[i]$인 공 ($i$보다 앞에 있으면서 $i$번 공보다 가벼운 공 $k$)
을 모두 움직여야 한다. $j<i$이고 $w[j]>w[i]$인 $(i,~j)$ 쌍이 존재한다면 $i$번 공을 앞으로 옮겨야 한다. 그런데 $i$번 공을 앞으로 옮기면 $k<i$이고 $w[k]<w[i]$인 $k$번 공($i$보다 앞에 있으면서 $i$번 공보다 가벼운 공) 역시 앞으로 옮겨야 한다. $i$번 공이 움직임에 따라 정렬이 깨졌기 때문이다.
위 조건을 만족하는 인덱스의 개수를 세면 된다. 의외로 구현이 까다로우니 주의.
될 듯 말 듯 해서 2시간 썼는데.. 이런 걸 30분 안에 풀어야 하는데. 쩝.
'Problem Solving > BOJ' 카테고리의 다른 글
2094. 강수량 (0) | 2023.06.14 |
---|---|
14922. 부분평균 (0) | 2023.05.02 |
12996. Acka (0) | 2023.04.14 |
1572. 중앙값 (0) | 2023.04.10 |
1615. 교차개수세기 (0) | 2023.03.30 |
Comments