목록전체 글 (23)
Deep CV

주유소 코드 n = int(input()) road = list(map(int, input().split())) gas_station = list(map(int, input().split())) answer = 0 min_p = int(1e9) for idx, price in enumerate(gas_station[:-1]) : # 해당 노드의 전에 있었던 최소 price로 계산 # 쉽게 생각하면 해당 노드 전에서 해당 노드까지 거리는 이미 최소 price로 계산 됐어야 한다. if min_p > price : min_p = price answer += min_p * road[idx] print(answer)

· 풀이 최소가 되려면 ' - '를 최대한 해야하므로, ' - ' 이후 식을 ' - '가 다시오기 전까지 묶어야 합니다. ex) 55-(50+40)-12-(24+62+32) ' - ' 를 기준으로 식을 분해하고, 분해된 식을 '+'을 기준으로 분해해서 정수로 변환하고 sum 해줍니다. (첫 합 - 나머지 합)을 하면 최소가 출력됩니다. N = input().split('-') for i in range(len(N)): N[i] = sum(map(int, N[i].split('+'))) for i in N[1:]: N[0] -= i print(N[0]) 참고로 sum은 함수로 쓰일 수 있으니 sum은 변수로 선언하는 것을 지양해야겠다.

· 풀이 걸리는 시간이 적은 사람이 먼저 진행해야 기다리는 사람의 수가 더 빨리 줄어듭니다. 따라서, 정렬해주고 차례로 (뽑는 시간 x 본인 포함 기다리는 사람)을 모두 더하면 최소 걸리는 시간이 됩니다. N = int(input()) wait = [] sum = 0 wait = sorted(map(int,input().split())) for i in range(N): sum = sum + wait[i] * (N-i) print(sum) 참고로 map을 사용하면 'map' object has no attribute 'sort' 가 뜨는데 이는 map은 목록을 반환하지 않고, 대신 iterator 객체를 반환하기 때문입니다.

· 풀이 끝나는 시간, 시작 하는 시간 기준으로 정렬 후, 시간 하는 시간이 전의 끝나는 시간 이후면 count. arr = [] n = int(input()) for i in range(n): arr.append(list(map(int,input().split()))) arr.sort(key=lambda x:(x[1],x[0])) count = 0 pre_end = 0 for start, end in arr: if start >= pre_end: pre_end = end count += 1 print(count)