
백준 문제집 PS
ses0028님의 "IT기업 및 대기업 계열사 코테보면서 비슷했던 문제들(지속적으로 업데이트 중)" (현재 기준 89문제)
이번 방학 2달동안 다 푸는 것이 목표입니다.
25.01.09 - 실버 5 5문제
문제 문제 제목 문제 티어 문제 링크 풀이 링크 11723 집합 실버 5 https://www.acmicpc.net/problem/11723 🔗 9655 돌 게임 실버 5 https://www.acmicpc.net/problem/9655 🔗 10431 줄세우기 실버 5 https://www.acmicpc.net/problem/10431 🔗 8979 올림픽 실버 5 https://www.acmicpc.net/problem/8979 🔗 7568 덩치 실버 5 https://www.acmicpc.net/problem/7568 🔗

15분
실버 5


20명의 학생들의 키를 입력받은 리스트를 순회한다. 순회하는 동안 한 학생의 앞에 해당 학생보다 키가 큰 학생이 한 명이라도 있다면 큰 학생들 중 가장 앞에 있는 학생의 바로 앞에 삽입한다. 그렇게 한 번 순회하면 키 순서대로 정렬되게 된다.
input = open(0).readline
for i in range(P := int(input())):
back_shift = 0
heights = list(map(int, input().split()))
seq = heights[0]
heights.remove(heights[0]) # heights에서 테스트케이스 번호 추출, 제거
for h in range(20): # 20명의 학생 순회하면서 특정 학생 -> h
for c in range(h): # 특정 학생의 앞부분만 확인해주면 됨
if heights[h] < heights[c]: # 앞에 큰 학생이 나타나면
back_shift += (h-c) # 뒷걸음치는 학생만큼 더해줌
heights.insert(c, heights[h])
heights.pop(h+1)
break
print(seq, back_shift)
주석에 작성된대로 코드를 짤 수 있다. 특정 학생의 앞부분만 확인해주면서, for문으로 순회하므로 특정 학생 heights[h] 보다 큰 학생이 나타나면 특정 학생을 큰 학생의 바로 앞에 삽입해주고 break문으로 탈출하면 된다. 왜냐하면 특정 학생보다 키 큰 학생들이 여러 명 있더라도 가장 앞에 나타나는 키 큰 학생 앞에 삽입해주어야 하기 때문이다.