목록그리디 (4)
꾸준하게 거북이처럼
1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 문제 풀이의 핵심 1. 딕셔너리 사용 ex) {'G': 9, 'C': 8, ,,,,,} 2. 가중치를 주어서 우선순위 매기기 내가 문제를 풀다가 놓친 부분은 가중치를 계산 하는 부분이었다. 가중치를 계산할 때 고려해야할 부분은 2가지가 있는데, - 자릿수가 큰 것뿐만이 아니라 - 알파벳이 나온 빈도수 자릿 수가 작긴 하지만 빈도 수가 많다면, 이 수를 큰 수로 매칭하는 것이! 그저 자릿수가 큰 수를 큰 수로 매칭했을 때 보다 결과 값이 클 수도 있다. 예시..
13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net from cmath import inf numOfCity = int(input()) cityDistance = list(map(int,input().split())) cost = list(map(int,input().split())) result = 0 lowerCost = inf for i in range(numOfCity - 1): if cost[i] < lowerCost: result += cost[i] * cityDistance[i] lowe..

1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 괄호를 집어넣어서 계산 결과값이 최소가 되도록 하는 문제로, 가장 최소가 되도록 만들어야 한다. 생각해보면 - 가 최소가 되게 하니, - 가 나온 다음부터 그 다음 - 까지 쭉 더한 수를 한번에 빼준다면 최솟값이 나올 수 있다는 것을 예상할 수 있다. 최소가 나와야하니 - 가 중심이 되어야함을 중점으로 두고 문제를 풀면 문제풀이 방향을 정할 수 있을 것 같다. 코드 arr = input().split('-') answer = 0 #arr[0]는 더하는 부분..

그리디 알고리즘을 공부하다 보니 정렬를 같이 사용하는 경우가 많은 것 같다. 파이썬 sort를 이용해서 2차원 배열 정렬 하는 법을 알아보자. 1. 두 번째 인자 기준으로 정렬 arr = [[4, 2], [2, 1], [1, 3], [7, 4], [6, 4]] arr.sort(key = lambda x : x[1]) print(arr) #[2, 1], [4, 2], [1, 3], [7, 4], [6, 4]] 2. 두 번째 인자 값이 같을 때 arr = [[4, 2], [2, 1], [1, 3], [7, 4], [6, 4]] arr.sort(key = lambda x:(x[1],x[0])) print(arr) #[2, 1], [4, 2], [1, 3], [6, 4], [7, 4]] 두 번째 인자 값이 같은..