Data Engineering/알고리즘 - Python

[백준 2875번] 그리디 알고리즘

ddoddo201 2021. 6. 27. 17:08

 

 

[ 백준 알고리즘 - 2875번 대회 or 인턴 ]

 

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

 

2875번: 대회 or 인턴

첫째 줄에 N, M, K가 순서대로 주어진다. (0 ≤ M ≤ 100, 0 ≤ N ≤ 100, 0 ≤ K ≤ M+N),

www.acmicpc.net

 

(오답)

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

for i in range(max(n,m,k)):
    n-=2
    m-=1
    if n==0 or m==0:
        if (n+m)>k:
            ans+=1
            break
        else:
            break

    else:
        ans+=1

print(ans)

문제: 문제의 예제가 아닌 경우 오답이 발생한다.

 

 

(정답1)

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

while True:
    n-=2
    m-=1
    if n<0 or m<0 or (n+m)<k:
        break
    else:
        ans+=1

print(ans)

 

 

 

 

(정답2)

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

while n>=2 and m>=1 and (n+m-k)>=3:
    n-=2
    m-=1
    ans+=1

print(ans-1)

* 여학생 2명, 남학생 1명이 반드시 있어야 한다

* 여학생, 남학생, 인턴십 참여학생을 모두 보냈을 때 0명 이상이어야 한다.

 

 

<공부>

고쳐야 할 점: for 문을 무작정 사용하지 말고 while을 생각해보자.

◾while은 조건이 참일 경우에만 반복된다. 

◾역 조건 지정할 때 부호 조심하자.

◾n < 0 or m < 0 or (n+m) < k     ↔     n >= 0 and m >= 0 and (n+m) >= k