Beginner
2024-04-21

번호표 교환

번호표 교환을 마친 각 학생들이 가진 번호표를 순서대로 출력하는 함수 구현하기

#99일지#99클럽#TIL#개발자스터디#코딩테스트#항해
직접 풀러가기

문제 설명

교실에는 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 의 값보다 크면 두 학생의 번호표를 서로 교환한다.
  • 마지막 학생이 카드를 받으면 그 카드는 버린다.

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

제한 사항

  • 첫 번째 줄에 학생의 수와 카드의 수를 나타내는 정수 N, M (1 ≤ N ≤ 100, 1 ≤ M ≤ 100) 이 공백으로 구분되어 입력된다.
  • 두 번째 줄부터 N줄에 걸쳐서 각 학생이 가지는 번호표의 값 Ai (1 ≤ Ai ≤ 1000) 가 주어진다.
입력출력
6 4 3 2 8 3 1 52 3 1 8 5 3
10 6 1 2 3 4 5 6 7 8 9 106 1 2 3 10 4 8 7 9 5

풀이

  1. 첫 번째 줄에는 학생의 수 N, 카드의 수 M을 공백으로 구분해 입력한다.
  2. input()으로 받은 입력은 문자열이므로 int형으로 변환한다.
  3. 번호표를 저장할 리스트를 선언한다.
  4. 리스트에 input()으로 입력 받은 번호표의 값을 저장한다.
  5. 1부터 M번 카드까지 주어진 규칙을 반복한다.
  6. 규칙에 대한 반복이 끝난 결과를 반복문을 돌면서 print()로 순서대로 출력한다.

Python

N, M = map(int, input().split(' '))

num_tickets = []

for i in range(N):
    num_tickets.append(int(input()))
    
for i in range(1, M+1):
    for index in range(1, len(num_tickets)):
        if num_tickets[index-1] % i > num_tickets[index] % i:
            num_tickets[index-1], num_tickets[index] = num_tickets[index], number_tickets[index-1]            
            
for ticket in number_tickets:
    print(ticket)