-문제: https://www.acmicpc.net/problem/9576

골드 Level1 문제.

n권 중에 최대로 줄 수 있는 책 수를 구하는 건 줄 알았는데 그게 아니라 학생의 수를 구하는 것이라서 틀렸던 문제

처음엔 아쉽이었는데, 두번째 때 해결함!

-틀린풀이: 

다른 사람에게 준 책 수를 books리스트에 넣고, 최종 리스트의 합이 답이라고 생각해서 짠 코드이다

student의 i행의 0열부터 1열까지의 책번호 중에 남아있는 책이 있으면 주는 방식으로 생각했다 

그런데 학생수를 구하는 것이었으므로 틀렸다

 

5번,10번에 n+1, student[i][1]+1로 코드 입력해야한다. 그냥 n,student[i][1]로하면 indexError 발생

 

case =int(input())
for _ in range(case):
    n,m=map(int,input().split())
    student=[]
    
    for _ in range(m):
        student.append(list(map(int,input().split())))
    student=sorted(student,key=lambda x: x[1])
    
    cnt=0
    books=[0]*(n+1) #i번째 책이 아직 있는지 확인하는용
    for i in range(m):
        for j in range(student[i][0],student[i][1]+1):
            if books[j]==0: #아직 안 나눠준 책이라면 준다
                books[j]=1
                cnt+=1
                break
    print(cnt)

-정답풀이: 

cnt 추가하고, student 리스트 1열로 정렬하고, 학생이 처음 책을 받았을 때 cnt세고 break하는 것까지 추가했다 

1열로 정렬하는 이유는 

N, M = 3, 3 이고 각 학생들의 신청숫자가 [ (1,2), (1,3), (2,2) ] 이라고 가정할 때, 첫 번째 학생에게 1번 책, 두 번째 학생에게 3번 책, 세 번째 학생에게 2번 책을 주면 된다.
만약 그냥 정렬을 한다면 첫 번째 학생이 1번 책, 두 번째 학생이 2번 책을 가져가 세 번째 학생은 책을 가져가지 못하게 된다. (출처: https://velog.io/@zwooo96/%EB%B0%B1%EC%A4%80-9576%EB%B2%88-%EC%B1%85-%EB%82%98%EB%88%A0%EC%A3%BC%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%ACPython)

'백준 > Greedy' 카테고리의 다른 글

[백준] 2012번: 등수 매기기  (0) 2022.02.09
[백준] 13904번: 과제(다시)  (0) 2022.02.09
[백준] 9237번: 이장님 초대  (0) 2022.02.09
[백준] 1092번: 배(다시 복습)  (0) 2022.02.08
[백준] 12904번: A와 B  (0) 2022.02.08

+ Recent posts