프론트엔드 개발자 중규리 입니다 ദി ᷇ᵕ ᷆ ) 자세히보기

PS/문제풀이

백준 1138 한 줄로 서기 Python

중규리 2024. 1. 28. 12:29

🐸 문제 정보

 

1138번: 한 줄로 서기

첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다

www.acmicpc.net

 

🤖 알고리즘

구현

 

⏱️ 풀이 시간

18.31m

 

📝 풀이

쉬운 구현 문제였다.

뒤에서부터 순회하면서 아래 조건대로 정답 리스트에 (인덱스 + 1)을 추가해주면 되는 문제였다.

  1. 왼쪽에 나보다 큰 사람이 없다면, 정답 리스트 가장 왼쪽에 (인덱스 + 1) 추가
  2. 왼쪽에 나보다 큰 사람이 있지만, 내 순서가 정답 리스트의 길이보다 작다면, 내 순서가 될 자리에 (인덱스 + 1) 추가
  3. 왼쪽에 나보다 큰 사람밖에 없다면, 정답 리스트 가장 오른쪽에 (인덱스 + 1) 추가

 

🧑‍💻 나의 답

# pypy3

import sys
input = sys.stdin.readline

n = int(input().rstrip())
nums = list(map(int, input().rstrip().split()))
res = []

for i in range(n - 1, -1, -1):
    length = len(res)
    if nums[i] == 0:
        res = [i + 1] + res
    elif nums[i] < length:
        res = res[:nums[i]] + [i + 1] + res[nums[i]:]
    else:
        res.append(i + 1)

print(*res)

'PS > 문제풀이' 카테고리의 다른 글

백준 4659 비밀번호 발음하기 Python  (0) 2024.02.02
백준 1806 부분합 Python  (2) 2024.01.28
백준 2075 N번째 큰 수 Python  (1) 2024.01.27
백준 2138 전구와 스위치 Python  (1) 2024.01.26
백준 2304 창고 다각형 Python  (0) 2024.01.26