알고리즘 풀이

[알고리즘] 백준 | 공 바꾸기, 과제 안 내신 분..?

째깍단 2023. 9. 6. 09:02

공 바꾸기

답: 

더보기
from sys import stdin

input = stdin.readline

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

bucket = [i for i in range(1, N+1)]

for i in range(M):
    first, second = map(int, input().split())
    first, second = first -1, second -1
    bucket[first], bucket[second] = bucket[second], bucket[first]

print(*bucket)

 

 

문제 분석 및 해석

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호

바구니에 공 1개씩, 바구니에 적혀있는 번호와 같은 번호

 

공을 바꿀 바구니 2개를 선택하고, 두 바구니에 들어있는 공을 서로 M번 교환

 

입력

5 4

1 2

3 4

1 4

2 2

출력

3 1 4 2 5

 

 

 

리뷰.

index를 맞추기 위해 bucket에 0번인덱스를 넣고, 출력시 [1:] 범위연산자를 사용했었지만

어떤 입력에서는 런타임 에러가 발생하는 듯 하다.

리팩터링 과정에서 first와 second에서 -1을 넣도록 변경했다

 

 


과제 안내신 분..?

 

답: 

더보기
from sys import stdin

input = stdin.readline

# student_num = [i for i in range(1, 31)]
student_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]

answer = student_num[:]
for _ in range(28):
    student = int(input())
    answer.remove(student)
answer.sort()
print(*answer, sep="\n")

 

 

문제 분석 및 해석

X대학 M교수님은 프로그래밍 수업을 맡고 있다.

학생이 30명, 1번부터 30번까지 출석번호

 

28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하기

 

입력은 총 28줄

출력은 2명의 번호, 작은 번호부터 각각 줄에 출력

 

 

 

리뷰.

list로 만들고 unpacking, sep으로 각각 줄에 출력하겠다고 생각했다

작은 번호순으로 출력이 있으므로 sort로 한번 정렬 필요.

 

range범위를 잘 생각하면서 풀면 쉽다!