algorithm/Greedy 4

[백준2212/골드5] 센서 - Python

https://www.acmicpc.net/problem/2212 센서 설치 구간을 중점으로 반지름이 일정하게 센서가 수신된다는 뜻인줄알고 예제를 이해하기 어려웠다.그래서 센서 설치 구간부터 양옆으로 거리가 일정하지 않아도 된다면 예제가 맞길래 그렇게 이해하고 풀었다. [예제 1]621 6 9 3 6 7 여기서 센서의 좌표를 정렬하면1 3 6 6 7 9이렇게 되고 이때 최솟값은 (1 3) (6 6 7 9) 이렇게 묶으면 거리의 합이 5로 최솟값이 된다.이때 K개의 묶음의 수를 만들 수 있는 방법은 센서 배열에서 K-1번 자르면(예제에서는 정렬 후 3과 6 사이)K개의 묶음이 나온다고 생각했다. 어디를 자를지 생각하다가 조합으로 모든 경우의 수를 구할까 했는데, 시간 초과가 날 것 같았다.그래서 다시 생각..

algorithm/Greedy 2025.03.23

[백준20117/실버1] 호반우 상인의 이상한 품질 계산법 - Python

https://www.acmicpc.net/problem/20117 처음에 배열을 묶음으로 안묶고 전체 배열의 중앙값 * N이 답인줄알아서 잘못풀었다.일단 호반우를 묶음으로 묶어서 계산한 후 그 합이 가장 큰 값을 찾아야했다.먼저 짝수개로 묶었을때 중앙값은 (묶음개수 / 2 + 1) 이 값이므로 묶음 길이를 2로 묶으면 품질을 뻥튀기할 수 있었다. 1. 호반우 배열 정렬2. 가장 끝과 가장 앞을 하나씩 뽑아서 묶은 후 계산하기3. 이때, (한 묶음의 이익) = (가장 끝 값 * 2)4. 따라서 배열의 [(N+1)//2:]의 sum * 2 = 전체 이익5. 배열의 길이가 홀수일 경우 하나 남으므로 더해주기 # 성공 코드N = int(input())arr = list(map(int, input().split..

algorithm/Greedy 2025.03.06

[백준17503/실버1] 맥주 축제 - Python

https://www.acmicpc.net/problem/17503 어떻게 풀어야할지 꽤 오래 고민했다.먼저 힙 없이 정렬하고 풀었는데 시간초과나서 힙으로 다시 구했다. 1. 도수레벨 기준으로 정렬 (도수 낮은 것 부터 순회하기 위해)2. 맥주 리스트 순회하면서 하나씩 선택하기2-1. 선택할 때 N개 아직 다 안찼으면 heappush3. push 하고나서 N개 꽉 찼으면 선호도 M 채웠는지 확인3-1. 선호도 M 채웠으면 최소 도수 레벨 갱신 (도수 레벨도 작은 것부터 순회하므로 현재 값으로 갱신)3-2. 선호도 M 못채웠으면 가장 작은 선호도를 가진 맥주 뺴기 heappop4. N개 맥주 다 못채웠으면 계속 for문 순회하며 반복 # 성공 코드 1# 89144 KB, 732 msimport sysinp..

algorithm/Greedy 2025.02.25

[백준17615/실1] 볼 모으기 - Python

https://www.acmicpc.net/problem/17615  처음에 가장 끝의 경계 구간에 어떤 색의 공이든 계속 가져다가 놓으면 자동으로 공이 분류된다고 생각했다.1. 리스트 순회하면서 경계 찾기2. 경계 찾으면 그부분 부터 공의 수 세어주기3. 순회 완료 후 센 빨간공의 수와 파란공의 수 비교해서 min값 출력하기 # 실패코드# 공 모으는 방법 : 경계선에 어느 색깔의 공이든 옮겨놓으면 알아서 분류됨N = int(input())balls = list(input())left = 0right = N-1cur = balls[-1]line = FalseR = 0B = 0for i in range(N-1, -1, -1): # 경계선이 안나타났다면 나올때까지 경계선 찾기 if not line..

algorithm/Greedy 2025.01.08