GitHub

https://github.com/Choidongjun0830

그리디 5

Baekjoon Online Judge 1744번. 그리디.

문제 링크 https://www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net 정답 코드 import sys N = int(sys.stdin.readline()) positive = [] negative = [] result = 0 for i in range(N): num = int(input()) if num > 1: positive.append(num) elif num = len(positive): #같이 곱해질 짝이 없으면 더하기 result += posi..

Baekjoon Online Judge 11399번 파이썬. 그리디.

문제 링크 https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 정답 코드 import sys N = int(sys.stdin.readline()) P = list(map(int,sys.stdin.readline().split())) P = sorted(P) min = 0 result = 0 for i in P: min += i result += min print(result)

Baekjoon Online Judge 1931번 파이썬. 그리디.

문제 링크 https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 정답 코드 import sys N = int(sys.stdin.readline()) I = [] for i in range(N): I.append(list(map(int,sys.stdin.readline().split()))) I = sorted(I,key=lambda x:x[0]) #시작시간 기준 오름차순 정렬 I = sorted(I,key=lambda x:x[1]) #종료시간 기준 오름차순 정렬 last = 0 #회의가 끝나는 시간 count = 0 #회의 개수 세기 for i,j in I: if ..

Baekjoon Online Judge 1783번 파이썬. 그리디.

문제 링크 https://www.acmicpc.net/problem/1783 1783번: 병든 나이트 첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net N = 1 이동할 수 없으므로 방문 할 수 있는 칸 수는 1. N = 2 위로 한 번,오른쪽 두번과 아래로 한 번, 오른쪽 두번. 이 두가지 이동패턴만 가능하다. 그런데, 4번 이상 이동하면 이동 패턴을 한번씩만 사용해야 한다. 그리고 이는 M의 길이에 따라 달라진다. M이 6보다 커질 때부터 이동 횟수가 4번이 되기 때문에 더 이상 이동할 수 없게 된다. 열의 크기 / 방문한 칸 수 M = 1 -> 1 M = 2 -> 1 M = 3 -> 2 M = ..

Baekjoon Online Judge 10610번 파이썬. 그리디.

문제 링크 https://www.acmicpc.net/problem/10610 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 30의 배수가 되려면, 3의 배수이며, 1의 자리가 0이어야한다. 3의 배수가 되려면, 각 자리 수의 합이 3의 배수가 되어야 한다. 이를 만족시키고, 내림차순 정렬을 하면 30의 배수가 될 수 있는 가장 큰 수를 구할 수 있다. 정답 코드 N= list(map(int,input())) sum = 0 for i in N: sum += i if sum % 3 != 0 or 0 not in ..

728x90