10431-s5.py 성공
This commit is contained in:
46
workbook_8708/10431-s5.py
Normal file
46
workbook_8708/10431-s5.py
Normal file
@@ -0,0 +1,46 @@
|
||||
# 줄세우기
|
||||
|
||||
import sys
|
||||
|
||||
input = sys.stdin.readline
|
||||
|
||||
def test(students):
|
||||
line = [float('inf')] * 20
|
||||
count = 0
|
||||
|
||||
for i, s in enumerate(students):
|
||||
now_idx = 0
|
||||
while 1:
|
||||
if line[now_idx] > s:
|
||||
break
|
||||
now_idx += 1
|
||||
for j in range(i-1, now_idx-1, -1):
|
||||
line[j+1] = line[j]
|
||||
count += 1
|
||||
line[now_idx] = s
|
||||
|
||||
return count
|
||||
|
||||
def solution():
|
||||
p = int(input().rstrip())
|
||||
|
||||
for _ in range(p):
|
||||
test_case = list(map(int, input().rstrip().split()))
|
||||
print(test_case[0], test(test_case[1:]))
|
||||
return
|
||||
|
||||
solution()
|
||||
|
||||
"""
|
||||
걸린 시간: 33분
|
||||
|
||||
시간 복잡도: 새로운 학생이 line에 들어올때마다 원래 있던 모든 학생이 움직이는 경우가 최대이므로
|
||||
학생 수를 n이라고 하면 학생 당 (n-1), (n-2),... 0 이므로 O(n^2)인데, 이 문제는 20명 고정이므로
|
||||
19*20/2 = 190 이다.
|
||||
|
||||
해설: 기본 line을 float('inf')로 세팅함으로써 사람이 없는 경우는 맨 뒤에 두고 없는 사람 취급을 한다.
|
||||
세팅 후 순서대로 한명씩 line에 넣는데 이때 나보다 큰 가장 앞에 있는 사람을 찾아야 하기 때문에
|
||||
그냥 맨 처음부터 보다가 나보다 큰 사람이 있으면 그 index에 내가 서고, 뒤에 있는 사람들을
|
||||
한 칸씩 뒤로 밀면 된다. 뒤로 밀때는 지금까지 line에 있는 사람 수에서 내가 들어가야할 index까지
|
||||
거꾸로 오면서 한 칸씩 뒤로 밀면 된다. 이때 count+1을 해주고 결과값 count를 반환하고 출력.
|
||||
"""
|
||||
Reference in New Issue
Block a user