본문 바로가기

Algorithm 💡272

[백준 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) 이번 문제는 본인이 문제를 잘못 읽게 되어 많이 헤맸던 문제였다. 여태까지 그리디 문제를 풀 때 주어진.. 2023. 2. 7.
[백준 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의 배수이다. 왜 저 조건이 중요한지 생각해보면, 이 문제를 간단하게 탐욕적으로 접근해서 풀 수 있는 이유는 가지고 있는 동전 중에서 .. 2023. 2. 7.
[백준 11399번] ATM # ATM n = int(input()) time_list = list(map(int,input().split())) time_list.sort() total = 0 solution = 0 for i in time_list: total = total + i solution += total print(solution) 이번 문제는 각 사람들이 돈을 인출하는데 걸리는 시간의 합에 대한 최솟값을 구하는 문제였는데, 난이도는 상당히 쉬운 편에 속하여 3분도 되지 않아 풀 수 있었다. (그래서 정답률이 높은 ,,) 이 문제의 핵심은 인출하는데 걸리는 시간이 적게 걸리는 순서대로 돈을 인출하는 것이다. (Greedy 알고리즘) 왜냐하면 앞의 사람이 인출하는데 시간이 오래 걸릴수록 뒤에 있는 사람들은 그 시간만큼 기.. 2023. 2. 6.
[백준 2839번] 설탕 배달 n = int(input()) soluton = 0 # 먼저 3의 배수인 경우랑 5의 배수인 경우 처리 # 3의 배수는 3의 개수를 5로 나눠서 몫 *3 + 나머지 if n%3 == 0: soluton = n // 3 soluton = ((soluton//5)*3) + (soluton%5) # 5의 배수는 그대로 elif n%5 == 0: soluton = n//5 # 5를 먼저 빼고 3으로 나눠지는지 확인 # 3으로 나눠지면 3으로 나눠서 그 몫을 더해주고 끝 # 3으로 나눠지지 않으면 5 한번더 빼기 else: while n != 0: # n이 1~2 이 되면 답이 X if n 0: soluton = -1 break # 5보다 크거나 같은 경우엔 5빼기 if n >= 5 : so.. 2023. 2. 6.
[이코테] 무지의 먹방 라이브 이번 문제는 단순하게 주어진 k 시간만큼 모든 음식들을 접근하여 다음 인덱스를 찾게 되면 정확성 및 효율성으로 인해 틀리게 되는 문제이다. 따라서 소요 시간이 적게 걸리는 음식부터 하나씩 먹어 치운 후에, 주어진 k 시간에서 남은 시간동안 가장 적게 시간이 걸리는 음식을 먹지 못할 때 그 나머지 값을 인덱스로 리턴하면 풀리게 되는 문제이다. 이 문제의 핵심은 모든 음식을 소요 시간을 기준으로 정렬한 뒤에, 시간이 적게 걸리는 음식부터 제거해 나가는 것이다. 이 문제를 접근하기 위해 내게 부족했던 파이썬 문법들은 다음과 같다. '음식을 먹는게 소요되는 시간'과 '인덱스'를 동시에 저장하기 위해서 Tuple 자료형을 사용할 수 있다는 점 sorted나 .sort로 정렬할 때 두번째 인자로 key 값을 부여하.. 2023. 2. 5.
[이코테] 볼링공 고르기 1. 본인 코드 n, m = map(int,input().split()) weight = list(map(int,input().split())) weight.sort() count = 0 # 리스트 집합화(원소의 값만 추출하기 위함) weight_set = set(weight) weight_value = list(weight_set) for i in weight_value: tempList = [j for j in weight if j > i] # 현재 i 값보다 큰 무게를 가진 공들만 추출(리스트 컴프리헨션 사용) count += (weight.count(i) * len(tempList)) # (현재 i 개수) * (무게가 더 큰 공 개수) = 조합의 개수 print(count) # 소요시간 : 0.0.. 2023. 2. 2.