알고리즘 스터디

[백준/파이썬][Bronze II] 번호표 교환 - 11949

난쟁이 개발자 2025. 2. 12. 17:33
반응형

[Bronze II] 번호표 교환 - 11949

문제 링크

성능 요약

메모리: 109544 KB, 시간: 92 ms

분류

구현, 시뮬레이션

제출 일자

2025년 2월 12일 16:05:51

문제 설명

교실에는 N명의 학생들이 한 줄로 서 있다. 각 학생들은 번호표를 하나씩 가지고 있다. i번째 학생의 번호표에 적힌 수는 Ai이다.

그리고 M개의 카드가 있다. 이 카드는 1부터 M까지의 값을 가진다. 각 카드는 반드시 1부터 사용하며, k (2 ≤ k ≤ M) 번 카드는 k-1번 카드를 쓴 다음에 쓴다.

게임의 규칙은 다음과 같다.

  • 선생님이 1번 학생에게 i번 카드를 준다. (1 ≤ i ≤ M)
  • 카드를 받은 j번 학생은 j+1번 학생에게 카드를 넘긴다.
  • Aj % i의 값이 Aj+1%i 의 값보다 크면 두 학생의 번호표를 서로 교환한다.
  • 마지막 학생이 카드를 받으면 그 카드는 버린다.

이 과정은 마지막 M번 카드까지 버리면 끝난다.

이 과정을 모두 마친 후의 각 학생들이 가진 번호표를 순서대로 출력하는 프로그램을 작성하시오.

입력

첫 번째 줄에 학생의 수와 카드의 수를 나타내는 정수 N, M (1 ≤ N ≤ 100, 1 ≤ M ≤ 100) 이 공백으로 구분되어 입력된다.

두 번째 줄부터 N줄에 걸쳐서 각 학생이 가지는 번호표의 값 Ai (1 ≤ Ai ≤ 1000) 가 주어진다.

출력

게임이 종료된 후에 각 학생이 가지는 번호표의 값을 한 줄에 하나씩 출력한다.

풀이

def main() :
    N, M = map(int, input().split())
    arr = [int(input()) for _ in range(N)]

    for i in range(1, M + 1) :
        for j in range(1, N) :
            if arr[j-1] % i > arr[j] % i :
                arr[j-1], arr[j] = arr[j], arr[j-1]

    for a in arr :
        print(a)

main()

진짜 구현만 하면 되는 문젠데, 무슨 소린지 하나도 모르겠다. 1번 학생한테 카드를 주고, 그 뒤의 학생하고 계속 교환을 시도한다. 인데 저 2번째와 3번째 조건이 이해가 되지 않아서 다른 분의 코드를 참고하였다. 알고리즘 문제인듯 하나 사실 한국어 문제 시험인 듯한 느낌을 많이 받았다.

반응형