반응형

파이썬 그리디 알고리즘 7

[파이썬, Python] 백준 1439: 뒤집기

문제 https://www.acmicpc.net/problem/1439 1439번: 뒤집기 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모 www.acmicpc.net 코드 s = input() cnt = 0 for i in range(len(s) - 1): if s[i] != s[i + 1]: cnt += 1 print((cnt + 1) // 2) 설명 어렵게 접근하려다가 아이디어가 생각이 안 나서 그냥 다른 부분을 뒤집어 보기로 생각했다. 0에서 1로 혹은 1에서 0으로 변하는 부분을 카운트해 준다. 그러고 나서 2로 나눈 몫을 출력할 건데 0 혹은 1..

[파이썬, Python] 백준 1541: 잃어버린 괄호

문제 https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 코드 exp = input().split('-') ans = 0 for i in exp[0].split('+'): ans += int(i) for i in exp[1:]: for j in i.split('+'): ans -= int(j) print(ans) 설명 식의 값이 최소가 되려면 최대한 큰 값을 빼주어야 한다. 즉, '-' 뒤의 모든 + 값을 괄호로 묶어주면 된다. [3 + 5 ..

[파이썬, Python] 백준 1049: 기타줄

문제 https://www.acmicpc.net/problem/1049 1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net 코드 import sys input = sys.stdin.readline n, m = map(int, input().split()) pack = list() one = list() for _ in range(m): a, b = map(int, input().split()) pack.append(a) one.append(b) min_pack, min_one = min(pack), min(o..

[파이썬, Python] 백준 14916: 거스름돈

문제 https://www.acmicpc.net/problem/14916 14916번: 거스름돈 첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다. www.acmicpc.net 코드 n = int(input()) cnt = 0 while n > 0: if n % 5 == 0: cnt += n // 5 break else: n -= 2 cnt += 1 if n < 0: print(-1) else: print(cnt) 설명 단순하게 5원부터 지급하고 나머지를 2원을 지급하려고 하면 오류가 난다. 거스름돈이 5의 배수여서 딱 나누어 떨어진다면 상관이 없지만 그렇지 않다면 2를 우선 빼주어서 계산을 해야 한다. 2를 빼다가 음수로 넘어가서 n이 음수가 된다면 -1을 출력하고 그렇지 않다면 결..

[파이썬, Python] 백준 2217: 로프

문제 https://www.acmicpc.net/problem/2217 2217번: 로프 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하 www.acmicpc.net 코드 import sys input = sys.stdin.readline n = int(input()) rope = sorted([int(input()) for i in range(n)], reverse = True) res = list() for i in rope: res.append(i * (len(res) + 1)) print(max(res)) 설명 우선 n과 로프의 값을 각각..

[파이썬, Python] 백준 1931: 회의실 배정

문제 https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 코드 import sys input = sys.stdin.readline n = int(input()) res = [] for i in range(n): a, b = map(int, input().split()) res.append((a,b)) res.sort(key=lambda x: (x[1],x[0])) cnt = 0 end_time = 0 for i,j in res: if i >= end_time: cnt += 1 end_time = j print(cnt) 설명 우선 각 값을 입력받고, key를 이용해..

[파이썬, Python] 백준 11047: 동전 0

문제 https://www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 코드 import sys input = sys.stdin.readline n,k = map(int,input().split()) coin = [] ans = 0 for _ in range(n): coin.append(int(input())) coin.sort(reverse = True) for i in coin: if k >= ..

반응형