알고리즘/문제풀이
[Python] 백준 한 줄로 서기 1138 - 구현 문제
정찡이
2021. 7. 3. 19:30
728x90
1. 문제
https://www.acmicpc.net/problem/1138
1138번: 한 줄로 서기
첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다
www.acmicpc.net
2. 문제 요약
- 자기보다 큰 사람이 왼쪽에 몇 명인지 알 수 있다.
- 줄을 선 순서대로 출력한다.

3. 아이디어 정리
키가 작은 학생부터 왼쪽에 나보다 키가 큰 사람 수만큼 자리를 비우고 맞는 순서에 배치한다. 예제 입력을 통해 직접 순서를 구현해보면 아래와 같다.

4. 문제 풀이
4-1. 내 풀이
"""
단순 구현 - 작은 사람부터 차례대로 채우기
"""
import sys
n = int(sys.stdin.readline())
arr = list(map(int, sys.stdin.readline().split()))
result = [0] * n
# 1. 키 작은 사람부터 결과 넣기
for i, a in enumerate(arr):
count = 0 # 앞에 키큰 사람 넣은 횟수
for j, res in enumerate(result):
# 2. 아직 아무도 안 채워지고, 앞에 키큰 사람으로 더 채워야하는 경우: count 늘리기
if res == 0 and count < a:
count += 1
# 3. 아직 아무도 안 채워지고, count 와 a가 동일한 경우: 현재 학생 넣기
elif res == 0 and count == a:
result[j] = i + 1
break
print(*result)
5. 결론
단순 구현 문제이다.
반응형