본문 바로가기

C언어

2025년 2학기 8주차 C언어

import sys
input = sys.stdin.readline

K, N = map(int, input().split())  

#랜선 길이를 저장할 빈 리스트를 만들어둔다
line = []

#k번 for문을 돌며 랜선들을 저장한다
for i in range(K):          
    num = int(input())      
    line.append(num)      
    
#이분탐색을 하는 조건을 설정한다
#start는 가장 작은 값인 1로 한다
start = 1
end = max(line)            # 가장 긴 랜선을 마지막 탐색 범위로 한다

while start <= end:

	#mid로 랜선 길이를 갱신해나간다
    mid = (start + end) // 2
    
    #count는 만들어질 수 있는 잘린 랜선의 길이다. 초기값은 0으로 한다
    count = 0

    # mid 길이로 잘랐을 때 만들 수 있는 랜선 개수 계산한다
    for x in line:
        count += x // mid

    # N개 이상 만들 수 있으면 mid를 더 늘릴 수 있다
    if count >= N:
        start = mid + 1

    else:
        end = mid - 1

print(end)

#문제 푸는 방식은 여러가지가 있는 것 같던데 완전탐색으로 했다
#DP방식은 잘 모르겠다....

N = int(input())
L = list(map(int, input().split()))
J = list(map(int, input().split()))

max_joy = 0   # 최대 기쁨 저장할 변수

def dfs(index, hp, joy):
    global max_joy

    # 체력이 0 이하가 될 시 아예 죽는다
    if hp <= 0:
        return

    # 안 죽고 살 시 값이 갱신된다
    max_joy = max(max_joy, joy)

    # 모든 사람을 다 고려했다면 종료한다
    if index == N:
        return

    # 1.index번 사람에게 인사하는 경우
    dfs(index + 1, hp - L[index], joy + J[index])

    # 2. index번 사람에게 인사하지 않는 경우
    dfs(index + 1, hp, joy)

# 초기 (첫 사람부터, 체력 100, 기쁨 0)
dfs(0, 100, 0)

print(max_joy)

 

'C언어' 카테고리의 다른 글

2025년 2학기 9주차 C언어  (0) 2025.11.23
2025년 2학기 7주차 C언어  (0) 2025.11.09
2025년 2학기 6주차 C언어  (0) 2025.11.02
2025년 2학기 5주차 C언어  (0) 2025.10.11
2025년 2학기 4주차 C언어  (1) 2025.10.05