본문 바로가기
반응형

알고리즘/그리디30

[백준][Python] 1439번 뒤집기 1439번: 뒤집기 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모 www.acmicpc.net 코드 n = list(map(int,(input()))) start = n[0] cnt = [0]*2 cnt[start] += 1 for i in range(1,len(n)): if n[i] != start: start = n[i] cnt[start] += 1 print(min(cnt)) 설명 0의 연속된 묶음과 1의 연속된 묶음이 각각 몇 번씩 나오는지 cnt를 이용하여 확인했다. 더 적게 나오는 수를 뒤집는 것이 행동의 최대 횟수이다. 2022. 5. 25.
[백준][Python] 1715번 카드 정렬하기 1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net 코드 import heapq import sys n = int(input()) h = [] for _ in range(n): num = int(sys.stdin.readline()) heapq.heappush(h,num) if n == 1: print(0) exit() answer = 0 while len(h)>1: a = heapq.heappop(h) b = heapq.heappop(h) sum = a+b answer+=sum heapq.heap.. 2022. 5. 4.
[백준][Python] 13975번 파일 합치기 3 13975번: 파일 합치기 3 프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T개의 테스트 데이터로 이루어져 있는데, T는 입력의 맨 첫 줄에 주어진다.각 테스트 데이터는 두 개의 행으로 주어지는데, www.acmicpc.net 코드 import heapq import sys t = int(input()) for _ in range(t): k = int(input()) n_list = list(map(int,sys.stdin.readline().split())) heapq.heapify(n_list) if k == 1: print(n_list[0]) break answer = 0 while len(n_list)>1: a = heapq.heappop(n_list) b = heapq.he.. 2022. 5. 3.
[백준][Python] 2812번 크게 만들기 2812번: 크게 만들기 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 코드 n,k = map(int, input().split()) num = int(input()) n_list = list(map(int,str(num))) # 숫자 분리할 때 먼저 문자열로 바꾼 후 분리 stack = [] cnt = 0 stack.append(n_list[0]) for i in range(1,n): while stack and n_list[i] > stack[-1]: if cnt == k: break stack.pop() cnt+=1 stack.append(n_list[i]) while cnt != k: stack.pop.. 2022. 5. 2.
반응형