4408. 자기 방으로 돌아가기
문제)
고등학교 학생들이 학교에서 수련회를 갔다. 수련회에 간 학생들은 친구들과 음주가무를 즐기다가 밤 12시가 되자 조교들의 눈을 피해 자기방으로 돌아가려고 한다.
제 시간에 자기방으로 돌아가지 못한 학생이 한 명이라도 발견되면 큰일나기 때문에 최단 시간에 모든 학생이 자신의 방으로 돌아가려고 한다.
숙소는 긴 복도를 따라 총 400개의 방이 다음과 같이 배열되어 있다.
모든 학생들은 현재 위치에서 자신의 방으로 돌아가려고 하는데, 만약 두 학생이 자기방으로 돌아가면서 지나는 복도의 구간이 겹치면 두 학생은 동시에 돌아갈 수 없다.
예를 들어 (방1 -> 4) 와 (방3 -> 6) 은 복도 구간이 겹치므로 한 사람은 기다렸다가 다음 차례에 이동해야 한다. 이동하는 데에는 거리에 관계없이 단위 시간이 걸린다고 하자.
각 학생들의 현재 방 위치와 돌아가야 할 방의 위치의 목록이 주어질 때, 최소 몇 단위시간만에 모든 학생들이 이동할 수 있는지를 구하시오.
[입력]
입력은 T(≤10)개의 테스트 케이스로 되어 있다. 각 테스트 케이스의 첫 줄에는 돌아가야 할 학생들의 수 N이 주어진다.
다음 N 줄에는 각 학생의 현재 방 번호(≤400)와 돌아가야 할 방의 번호(≤400)가 주어진다. 주어지는 2N개의 방 번호 중 중복되는 것은 없다.
[출력]
테스트 케이스 T에 대한 결과는 “#T ”을 찍고, 각 테스트 케이스마다 필요한 시간을 한 줄에 하나씩 출력한다.
풀이)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
T = int(input())
for _ in range(T):
room = [0] * 201
n = int(input())
for i in range(n):
o, k = map(int, input().split())
if o > k:
o, k = k, o
if o % 2 == 0: # o가 짝수이면
o = (o // 2) - 1
else: # 홀수이면
o = ((o - 1) // 2)
if k % 2 == 0: # k가 짝수이면
k = (k // 2) - 1
else: # 홀수이면
k = ((k - 1) // 2)
for j in range(o, k + 1):
room[j] += 1
print(f"#{_ + 1} {max(room)}")
|
cs |
문제 출처 : https://swexpertacademy.com/main/main.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
※ SW Expert 아카데미는 원칙적으로 문제를 무단 복제하는 것을 금지합니다.
학습용으로 문제를 가져왔으나, 문제가 될 시 수정 및 삭제하겠습니다.
'Develop > Python + SWEA' 카테고리의 다른 글
[SW Expert Academy] 4866. 괄호검사 (0) | 2022.02.22 |
---|---|
[SW Expert Academy] 2005. 파스칼의 삼각형 (0) | 2022.02.21 |
[SW Expert Academy] 1211. Ladder2 (0) | 2022.02.20 |
[SW Expert Academy] 1258. 행렬찾기 (0) | 2022.02.20 |
[SW Expert Academy] 1215. 회문1 (0) | 2022.02.20 |