본문 바로가기

백준 write-up/정렬 & 그리디

[백준] 제 2회 IUPC는 잘 개최될 수 있을까? : 12788번 - Python

728x90
반응형

https://www.acmicpc.net/problem/12788

 

12788번: 제 2회 IUPC는 잘 개최될 수 있을까?

2016년 5월 28일 제 2회 인하대학교 프로그래밍 경시대회(IUPC)가 개최된다. 이 대회는 다른 프로그래밍 경시대회와 다르게  손코딩으로 문제를 풀어야한다. CTP회장인 정은이는 모든 대회 참가자들

www.acmicpc.net

 

 

 

문제의 접근 방법

 

- 대회에 참가한 사람의 수를 어떻게 구할지 생각해보기

- 최소 인원의 회원들에게 펜을 빌리기 위해서는 가장 펜을 많이 가지고 있는 회원을 우선시!

 

 

 

내가 막혔던 부분

 

펜의 개수가 부족할 때 "STRESS" 를 출력하는 방법

-> break문을 걸어주지 않아서 반복 출력되게 함.

 

 

 

문제 풀이 방법

 

CTP의 회원 수 n명 입력 받기 -> 참가 팀의 수(m), 팀을 구성하는데 필요한 팀원의 수(k) 입력 받기 -> CTP 회원들이 가지고 있는 펜의 수 a를 입력 받아 리스트에 저장하기 -> 최댓값 우선으로 계산하기 위해 내림차순 정렬하기 -> n번 반복문을 돌려 참가자 수(m*k)가 리스트 a의 모든 원소들의 합(CTP의 회원들이 가지고 있는 펜의 총 개수)이 작다면 "STRESS" 출력 -> result변수를 선언해 리스트 a의 i번째 원소들을 더해나가는데 만약 참가자 수(m*k)가 누적되어서 더해진 result 값보다 크면 계속 다음 원소를 더해나가고, 만약 작다면 현재 인덱스 번호에 1을 더해서 출력!!! <- 0번째 인덱스부터 시작했기 때문에 1을 더하기

 

 

 

소스코드

n = int(input())
m,k = map(int, input().split())

a = list(map(int, input().split()))
a = sorted(a, reverse=True)

result = 0
for i in range(n):

    if m*k > sum(a):
        print("STRESS")
        break

    result += a[i]
    
    if m*k > result:
        continue
    else:
        print(i+1)
        break
728x90
반응형