-
1138. [Python]한 줄로 서기Python_알고리즘/Silver II 2023. 12. 5. 03:14
1. 문제
https://www.acmicpc.net/problem/1138
1138번: 한 줄로 서기
첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다
www.acmicpc.net
2. 접근 방법
- 시간 제한: 2초
- 메모리 제한: 128MB
- 구현
3. 파이썬 코드
N = int(input()) # 값 리스트 num_list = list(map(int,input().split())) # 정답을 출력할 리스트 ans_list = [0]*N # enumerate 사용하여 index와 value 같이 받아옴 for i,v in enumerate(num_list): index = 0 cnt = 0 # cnt 로 0의 개수를 체크하면서 앞의 빈숫자가 몇개인지 체크 while cnt != v: # 만약 ans_list 의 index 가 0인 경우 0의 개수 증가 if ans_list[index] == 0: cnt += 1 # 반복하며 index 값 1씩 증가 index += 1 # 만약 0의 개수는 충족하지만 index에 값이 있는 경우 if ans_list[index] != 0: # index에 값이 없을때까지 index 증가 while ans_list[index] != 0: index += 1 # 0인 ans_list에 index + 1 값 넣어줌 ans_list[index] = i + 1 print(*ans_list)
4. 문제를 풀고난 후 생각
- 오랜만에 푸는 문제라 생각이 굳었다.
- 간단한 구현으로 작은 수부터 enumerate를 사용하여 index와 value 값을 가지고 ans_list를 순회하며 0의 개수를 체크해준다.
- 작은 수부터 진행되기 때문에 앞의 0의 개수가 그 수가 들어갈 위치가 된다.
- 이제 0의 개수가 충족했을때 반복문을 탈출하도록 설정했지만, 반복문을 탈출했을때 ans_list에 값이 있으면 0이 나올때까지 index를 증가시킨 후 조건에 맞으면 ans_list에 i + 1값을 넣어준다.
5. 문제를 푸는데 도움이 되는 지식
- 구현
'Python_알고리즘 > Silver II' 카테고리의 다른 글
1569. [Python]정사각형으로 가리기 (0) 2024.02.18 1706. [Python]크로스 워드 (0) 2024.01.14 15663. [Python]N과 M(9) (1) 2023.10.03 17086. [Python]아기 상어2 (0) 2023.09.26 18870. [Python]좌표 압축 (0) 2023.09.04