코딩테스트
[Python] 백준 1138번 - 한 줄로 서기
박매트
2024. 6. 21. 18:54
https://www.acmicpc.net/problem/1138
n = int(input())
arr = list(map(int, input().split()))
answer = [0]*n
for i in range(n):
cnt = 0
for j in range(n):
if cnt == arr[i] and answer[j] == 0:
answer[j] = i + 1
break
elif answer[j] == 0:
cnt += 1
print(' '.join(map(str, answer)))
봐도봐도 이해가 안 가서 글을 참고하였다...
참고 : https://gudwns1243.tistory.com/31
[백준][파이썬]1138번: 한 줄로 서기
문제 출처 : www.acmicpc.net/problem/1138 1138번: 한 줄로 서기 첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이
gudwns1243.tistory.com
작은 수 부터 자리를 채워나가면 된다.
큰 사람이 왼쪽에 몇 명이 있어야 하는지 주어진 값을 보고 그만큼의 빈자리를 비워 둔 후에 값을 채우면 된다.
예시를 들어보면
2 1 1 0 이라고 주어진 경우
0 0 1 0 // 왼쪽에 두명이 있으므로 2칸을 비워두고 자리를 채운다.
0 2 1 0
0 2 1 3
4 2 1 3
의 순서대로 칸을 채워나가게 된다.
이 경우에 앞에 0인 경우 cnt를 올려주고, 아닐 경우에는 패스해주면서 빈 자리를 체크해주며
채워가는 answer리스트가 0이면서 cnt가 앞에 필요한 사람의 수와 같아 질 경우 해당 자리에 값을 넣고 break를 해주면 된다.
Kotlin 버전 답
import java.util.*
fun main() {
val scanner = Scanner(System.`in`)
val n = scanner.nextInt()
val arr = IntArray(n) { scanner.nextInt() }
val answer = IntArray(n) { 0 }
for (i in 0 until n) {
var cnt = 0
for (j in 0 until n) {
if (cnt == arr[i] && answer[j] == 0) {
answer[j] = i + 1
break
} else if (answer[j] == 0) {
cnt++
}
}
}
println(answer.joinToString(" "))
}