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
작은 수 부터 자리를 채워나가면 된다.
큰 사람이 왼쪽에 몇 명이 있어야 하는지 주어진 값을 보고 그만큼의 빈자리를 비워 둔 후에 값을 채우면 된다.
예시를 들어보면
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(" "))
}
'코딩테스트' 카테고리의 다른 글
[Python] 백준 19941번 - 햄버거 분배 (0) | 2024.06.20 |
---|---|
[Python] 백준 25757번 - 임스와 함께하는 미니게임 (0) | 2024.06.20 |
[Python] 백준 10431번 - 줄세우기 (0) | 2024.06.13 |
[Python] 백준 - 2563번 색종이 (0) | 2024.06.12 |
[Python] 백준 1158번 - 요세푸스 문제 (1) | 2024.06.11 |