반응형

파이썬 그리디 8

[파이썬, 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] 백준 1026: 보물

문제 https://www.acmicpc.net/problem/1026 1026번: 보물 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거 www.acmicpc.net 코드 n = int(input()) a_list = sorted(list(map (int, input().split()))) b_list = sorted(list(map (int, input().split())), reverse = True) ans = 0 for i in range(n): ans += a_list[i] * b_list[i] print(ans) 설명 두 리스트의 수를 ..

[파이썬, Python] 백준 11399: ATM

문제 https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 코드 import sys input = sys.stdin.readline n = int(input()) time = sorted(list(map(int, input().split()))) cnt = 0 for i in range(n): cnt += time[i] * (n-i) print(cnt) 설명 먼저 하는 사람의 시간이 짧을수록, 결괏값이 작아지므로 시간을 오름차순으로 정렬해 준다. 이후 시간을 cnt에 더해주는데,..

[파이썬, 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 >= ..

반응형