파이썬 알고리즘

[파이썬] SWEA 4408 자기 방으로 돌아가기

뜻 지, 깨달음 오 2022. 10. 31. 17:56

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWNcJ2sapZMDFAV8 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

발상이 어려웠던 문제였다...

 

1) 학생들이 방 숫자가 작은 곳에서 큰곳으로 가든, 큰곳에서 작은 곳으로 가든

그 방향을 알 필요는 없다

이게 무슨 말이냐 하면

1번 학생이 1번방에서 4번방으로 가고, 2번 학생이 1번 방에서 4번 방으로 가는 경우랑

1번 학생이 1번방에서 4번방으로 가고, 2번 학생이 4번 방에서 1번 방으로 가는 경우랑

아예 똑같다는 것이다.

그래서 헷갈림을 방지하기 위해 무조건 학생은 숫자가 작은 방에서 큰방으로 가게끔 코드를 짰다.

T = int(input())
 
for tc in range(1, 1+T):
    students = int(input())
    arr = [list(map(int, input().split())) for _ in range(students)]
 
    for i in range(students):
        if arr[i][0] > arr[i][1]:
            arr[i][0], arr[i][1] = arr[i][1], arr[i][0]

 

2. 학생들은 동시에 움직인다.

1번방에서 2번방으로 1번 학생이 가고,

1번 방에서 3번 방으로 2번 학생이 가고

90번 방에서 91번 방으로 3번 학생이 가면

1번 학생이랑 3번학생이 1초일때 같이 움직이고

2번학생은 혼자 움직인다.

 

그러니까

100번째 학생이랑 1번째 학생이랑 같이 움직일수도 있다는 것.

 

따라서 그냥 for문을 도는게 아니라,

bucket에 한번 따로 넣어야한다.

1번 2번이 서로 반대편에있고,

3번, 4번,,,, 등등이니까

이 두 방들을 묶어서 한 방으로 엮어준다.

    bucket = [0]*401
 
    for i in range(students):
        for j in range((len(bucket)+1)//2):
            if (arr[i][0]+1)//2<= j <=(arr[i][1]+1)//2:
                bucket[j] += 1
    # print(bucket)
    MAX = 0
    for i in range(len(bucket)):
        if bucket[i]>MAX:
            MAX = bucket[i]
 
    print(f'#{tc} {MAX}')

 

 

 

 

 

전체 코드)

T = int(input())
 
for tc in range(1, 1+T):
    students = int(input())
    arr = [list(map(int, input().split())) for _ in range(students)]
 
    for i in range(students):
        if arr[i][0] > arr[i][1]:
            arr[i][0], arr[i][1] = arr[i][1], arr[i][0]
    bucket = [0]*401
 
    for i in range(students):
        for j in range((len(bucket)+1)//2):
            if (arr[i][0]+1)//2<= j <=(arr[i][1]+1)//2:
                bucket[j] += 1
    # print(bucket)
    MAX = 0
    for i in range(len(bucket)):
        if bucket[i]>MAX:
            MAX = bucket[i]
 
    print(f'#{tc} {MAX}')

'파이썬 알고리즘' 카테고리의 다른 글

재귀함수로 누적합 구하기  (0) 2022.10.31
SWEA 1208 Flatten  (0) 2022.10.31
[파이썬] SWEA 11671 기지국  (0) 2022.10.31
[파이썬] 백준 1475번 방 번호  (0) 2022.10.31
[파이썬] 백준 6603 로또  (0) 2022.10.31