[USACO/백준] Candy Cane Feast - Python

·2024년 1월 6일

알고리즘

목록 보기
3/3

백준 31063

위 문제는 2023년 12월 USACO 브론즈 1번 문제이다.

문제 요약

각 캔디마다 소들이 순서대로 캔디를 먹는다.
이때 자기 키까지만 먹을 수 있고, 자기 키를 먹으면 캔디는 그 위치에 그대로 떠있다.
예시) 길이가 6인 캔디를 높이가 3인 소가 먹으면 캔디는 4~6 위치에 떠있는 것이다.
한 캔디를 모두 먹은후에 각 소가 먹은 만큼 키가 증가한다.
다음 캔디도 위와 같은 작업을 진행한다.

해설

위와 같은 내용을 단순히 구현하면 되는 문제이다.
주의해야 할 점은 캔디를 다먹으면 이후 소들은 먹을 수 있는게 없으니 break해야한다. 안하면 시간초과남.

입력 예제

3 2    # 소 마리수, 캔디 수
3 2 5  # 각 소의 높이
6 1    # 각 캔디의 높이

출력 예제

7   # 1번 소의 최종 높이
2   # 2번 소의 최종 높이
7   # 3번 소의 최종 높이

코드

cow_num, candy_num = map(int, input().split())
cows = list(map(int, input().split()))
candies = list(map(int, input().split()))
grow = [0]*cow_num
candy_locations = [1]*candy_num

for k in range(candy_num):
    for r in range(cow_num):
        if cows[r] >= candies[k]: # 사탕 높이 보다 크다면
            cows[r] += candies[k] - (candy_locations[k]-1)
            break
        elif cows[r] >= candy_locations[k]: # 사탕 하단 높이 보다 크다면
            grow_before = cows[r]
            cows[r] += cows[r] - (candy_locations[k]-1)
            candy_locations[k] = grow_before+1

for k in cows:
    print(k)

0개의 댓글