Python 234

[백준 1541번] 잃어버린 괄호

expression = input() # '-'를 기준으로 분할 # ex) ['00009','00009+00008'] split_exp = expression.split('-') for i in range(len(split_exp)): # 분할된 문자열들을 순서대로 '+'를 기준으로 분할 후 합을 구하기(내부는 +로만 이루어져 있기 때문) # 그리고 동시에 앞에 0으로 채워진 문자열들을 정수화 시킨다 # ex) [9, 17] split_plus = list(map(int,split_exp[i].split('+'))) split_exp[i] = sum(split_plus) # 첫 번째 원소를 제외한 나머지 원소들은 '-'를 기준으로 파싱되었기 때문에 모두 빼주면 된다. # ex) 9 - 17 print(s..

Algorithm/Greedy 2023.02.08

[백준 1026번] 보물

n = int(input()) a = list(map(int,input().split())) b = list(map(int,input().split())) a.sort() a_resort = [0] * n b_index = [] for i in range(n): b_index.append((i,b[i])) b_index.sort(key=lambda x:-x[1]) for i in range(n): a_resort[b_index[i][0]] = a[i] sum = 0 for i in range(n): sum += (a_resort[i] * b[i]) print(sum) 이번 문제는 전형적인 Greedy 알고리즘 문제로 난이도는 크게 어렵지 않았다. 이 문제의 핵심은 배열 A의 원소와 B의 원소간의 곱이 최..

Algorithm/Greedy 2023.02.07

[백준 1931번] 회의실 배정

# 회의실 배정 n = int(input()) list = [] count = 0 last_time = 0 for i in range(n): start, end = map(int,input().split()) list.append((start,end)) # 시작시간 기준으로 오름차순 정렬 list.sort(key=lambda x:x[0]) # 종료시간 기준으로 오름차순 정렬 list.sort(key=lambda x:x[1]) # 회의 시간이 겹치지 않도록 회의 선정 for i in list: if i[0] >= last_time: count += 1 last_time = i[1] print(count) 이번 문제는 본인이 문제를 잘못 읽게 되어 많이 헤맸던 문제였다. 여태까지 그리디 문제를 풀 때 주어진..

Algorithm/Greedy 2023.02.07

[백준 11047번] 동전 0

n, k = map(int,input().split()) value = [] count = 0 for i in range(n): value.append(int(input())) value.sort(reverse=True) while k!=0: for i in value: if k//i > 0: count += k//i k %= i print(count) 이번 문제는 대표적인 Greedy 알고리즘 문제로, 주어진 동전 단위들을 가지고 최소한의 동전을 사용하여 금액(k)를 만드는 것이 핵심이다. 여기서 가장 중요한 조건은 바로 A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수이다. 왜 저 조건이 중요한지 생각해보면, 이 문제를 간단하게 탐욕적으로 접근해서 풀 수 있는 이유는 가지고 있는 동전 중에서 ..

Algorithm/Greedy 2023.02.07