목록Python/백준(BOJ) 알고리즘 (7)
Deep CV
풀이 입력 차례가 홀수면 왼쪽 리스트에 추가하고, 짝수면 오른쪽 리스트에 추가를 합니다. (각 리스트의 0번째는 가운데거나 가장 가까운 수로 왼 리스트를 역순으로(maxheap)으로 정렬, 오른쪽 리스트는 minheap으로 정렬) 왼쪽 첫번째가 오른쪽 첫번째보다 항상 작도록 하여 입력의 개수가 짝수일 경우 왼쪽 첫번째가 가운데 작은 숫자가 되도록 합니다. import sys import heapq input = sys.stdin.readline def sol1655(): left = [] right = [] n = int(input()) for i in range(1, n+1): num = int(input()) if len(left) == len(right): heapq.heappush(left,(-n..
1. 풀이 풀이를 완료하고 다른 사람의 풀이 중에 괜찮은게 있어서 조금 수정해봤습니다. sort 과정이 필요없이 key : value 형태로 입력을 받습니다. 그러면 첫번째 성적순으로 정렬된 것과 같습니다. 1등은 무조건 합격이므로 합격자 수를 1로 시작합니다. 2등의 부터는 앞선 등수 들의 2번째 시험보다 높아야 합격이므로, 앞선 성적들의 최소보다 2번째 등수가 낮아야 합격입니다. from sys import stdin input = stdin.readline for _ in range(int(input())): size = int(input()) grid = [0 for i in range(size + 1)] for i in range(size): x, y = map(int, input().split..
주유소 코드 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 객체를 반환하기 때문입니다.