[Python] 백준 10431번 - 줄세우기

유빈·2025년 1월 9일
0

Algorithms

목록 보기
19/35
post-thumbnail

백준 문제집 PS

ses0028님의 "IT기업 및 대기업 계열사 코테보면서 비슷했던 문제들(지속적으로 업데이트 중)" (현재 기준 89문제)

이번 방학 2달동안 다 푸는 것이 목표입니다.

25.01.09 - 실버 5 5문제

문제문제 제목문제 티어문제 링크풀이 링크
11723집합실버 5https://www.acmicpc.net/problem/11723🔗
9655돌 게임실버 5https://www.acmicpc.net/problem/9655🔗
10431줄세우기실버 5https://www.acmicpc.net/problem/10431🔗
8979올림픽실버 5https://www.acmicpc.net/problem/8979🔗
7568덩치실버 5https://www.acmicpc.net/problem/7568🔗


🔗 문제 링크

백준 9655번: 줄세우기


⏰ 소요된 시간

15분



🛡️ 난이도

실버 5



✨ 수도 코드

1. 문제 이해

20명의 학생들의 키를 입력받은 리스트를 순회한다. 순회하는 동안 한 학생의 앞에 해당 학생보다 키가 큰 학생이 한 명이라도 있다면 큰 학생들 중 가장 앞에 있는 학생의 바로 앞에 삽입한다. 그렇게 한 번 순회하면 키 순서대로 정렬되게 된다.


2. 코드 분석

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문으로 탈출하면 된다. 왜냐하면 특정 학생보다 키 큰 학생들이 여러 명 있더라도 가장 앞에 나타나는 키 큰 학생 앞에 삽입해주어야 하기 때문이다.



profile
🌱

0개의 댓글