알고리즘 스터디
[백준/파이썬][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번째 조건이 이해가 되지 않아서 다른 분의 코드를 참고하였다. 알고리즘 문제인듯 하나 사실 한국어 문제 시험인 듯한 느낌을 많이 받았다.
반응형