그리디 12

[백준][Python] 2785 체인

⛓️https://www.acmicpc.net/problem/2785  내 풀이N = int(input())L = sorted(list(map(int, input().split())))ring = 0if len(L) 2: L[0] -= 1 if L[0] 0: ring += 1print(ring)  코드 설명 문제가 이해가 안 됐다 ..계속 헛다리 짚다가 결국 문제 해석을 위한 구글링 찬스point: 가능한 한 적은 고리를 사용해야 함, 하나의 긴 체인으로 모든 체인을 묶어야 함 가장 효율이 좋은 방식은 하나의 고리를 열어 양쪽으로 연결하는 것이다. 우선 두 가지 상황으로 나누어서 생각했다.1. 체인의 개수가 3 미만(2개)인 경우2. 체인의 개수가 3 이상인 경우..

코딩테스트 2024.06.01

[백준][Python] 23561 Young한 에너지는 부족하다

💃🏻 https://www.acmicpc.net/problem/23561 23561번: Young한 에너지는 부족하다 연령이 22, 23, 26살인 세 명을 묶어서 하나, 21, 24, 25살인 세 명을 묶어서 하나의 크루를 만들면 된다. 각 크루의 에너지(연령의 중간값)는 23과 24가 되며, 문제에서 구하는 값은 24 - 23 = 1이 된다. www.acmicpc.net 내 풀이 N = int(input()) player = sorted(list(map(int, input().split()))) # 오름차순 정렬 energy = player[N:N+N] print(energy[-1] - energy[0]) 코드 설명 풀이 방식이 바로 떠오르지 않아서 그려보면서 방법을 찾으려고 했다. 내가 크루를 구성..

코딩테스트 2024.04.21

[백준][Python] 11508 2+1 세일

🥛 https://www.acmicpc.net/problem/11508 11508번: 2+1 세일 KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 나머지 두 www.acmicpc.net 내 풀이 N = int(input()) C = [] ans = 0 for _ in range(N): C.append(int(input())) C = sorted(C, reverse=True) # 내림차순 정렬 while len(C) >= 3: # 한 번에 3개의 유제품을 사는 경우 dairy = C[0:3] ans += sum(dairy) - min(dairy) del C[0:3] ..

코딩테스트 2024.04.02

[백준][Python] 2847 게임을 만든 동준이

🎮 https://www.acmicpc.net/problem/2847 2847번: 게임을 만든 동준이 학교에서 그래픽스 수업을 들은 동준이는 수업시간에 들은 내용을 바탕으로 스마트폰 게임을 만들었다. 게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어 www.acmicpc.net 내 풀이 N = int(input()) score = [] ans = 0 for _ in range(N): score.append(int(input())) for i in range(N-1, 0, -1): if score[i-1] >= score[i]: new_score = score[i] - 1 ans += score[i-1] - new_score score[i-1] = new_score ..

코딩테스트 2024.03.19

[백준][Python] 2885 초콜릿 식사

🍫 https://www.acmicpc.net/problem/2885 2885번: 초콜릿 식사 학교 근처 편의점에 새 초콜릿이 들어왔다. 이 초콜릿은 막대 모양이고, 각 막대는 정사각형 N개로 이루어져 있다. 초콜릿의 크기(정사각형의 개수)는 항상 2의 제곱 형태이다. 즉, 1, 2, 4, 8, 16, ... www.acmicpc.net 내 풀이 K = int(input()) size = 0 # 구매해야하는 가장 작은 초콜릿의 크기 ans = 0 # 최소 몇 번 쪼개야 하는지 exponent = 0 # 현재 지수 arr = [] # 현재 초콜릿들의 사이즈 while True: if pow(2, exponent) >= K: size = pow(2, exponent) arr.append(size) break..

코딩테스트 2024.03.13

[백준][Python] 1049 기타줄

🎸 https://www.acmicpc.net/problem/1049 1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net 내 풀이 N, M = map(int, input().split()) packages = [] pieces = [] ans = float('inf') for _ in range(M): price1, price2 = map(int, input().split()) packages.append(price1) pieces.append(price2) # 패키지와 낱개의 최소 가격 추출 (다른 값은 필..

코딩테스트 2024.03.05

[백준][Python] 28353 고양이 카페

🐈 https://www.acmicpc.net/problem/28353 28353번: 고양이 카페 첫째 줄에 정수 $N$과 $K$가 공백으로 구분되어 주어진다. $(1 \leq N \leq 5\,000;$ $1 \leq K \leq 10^9)$ 둘째 줄에는 각 고양이의 무게를 의미하는 $N$개의 정수 $w_1, w_2, \dotsm, w_N$이 공백으로 구분되어 주어 www.acmicpc.net 내 풀이 N, K = map(int, input().split()) cats = sorted(map(int, input().split())) ans = 0 s = 0 e = N-1 while e-s > 0: if cats[s] + cats[e] > K: # 무게 초과 e -= 1 else: ans += 1 s +..

코딩테스트 2024.03.03

[백준][Python] 1141 접두사

🐉 https://www.acmicpc.net/problem/1141 1141번: 접두사 접두사X 집합이란 집합의 어떤 한 단어가, 다른 단어의 접두어가 되지 않는 집합이다. 예를 들어, {hello}, {hello, goodbye, giant, hi}, 비어있는 집합은 모두 접두사X 집합이다. 하지만, {hello, hell}, {giant, www.acmicpc.net 내 풀이 N = int(input()) words = [] ans = 0 for _ in range(N): words.append(input()) for i in range(N): for j in range(N): if i == j: continue if words[j].find(words[i]) == 0: # 0일 때 접두사 word..

코딩테스트 2024.03.02