목록greedy (26)
기록방
👉 문제링크 7507번: 올림픽 게임 각 테스트 케이스마다 "Scenario #i:"를 출력한다. 여기서 i는 테스트 케이스 번호이며 1부터 시작한다. 그 다음 줄에는 상근이가 참석할 수 있는 경기의 최대 개수를 출력한다. 문제에서도 설명했지 www.acmicpc.net 🔸 문제 분석 🔸 문제 한 경기가 끝나야 다음 경기를 볼 수 있다. 종료와 시작 시간이 완전히 같아도 볼 수 있다. 테스트 케이스 별, 한 사람이 볼 수 있는 최대 경기 수를 출력한다. 풀이 (Greedy) 경기 정보를 날짜와 종료 시간으로 오름차순 정렬 한다. 다음 경기를 볼 수 있으면 카운트 + 1을 한다. 다음 경기가 다음 날짜이면, 무조건 볼 수 있으므로 다음 경기로 이동한다. 다음 경기의 시작이 현재 경기의 종료 시간보다 같거나..
👉 문제링크 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 🔸 문제 분석 🔸 입력된 수의 각 자리를 바꿔 만들 수 있는 30의 배수의 최대값을 출력한다. 30의 배수를 만들지 못하면 -1을 출력한다. 30의 배수가 되기 위해서는, 가장 오른쪽 수가 0이 되야하며 모든 자리수의 합이 3의 배수가 되어야 한다. 입력된 수를 자리 수 대로 내림차순 정렬한다. 각 자리수의 합과 가장 끝 수를 확인한다. 🔸 코드 🔸 import java.util.Arrays; import java.util.Collections; imp..
👉 문제링크 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 🔸 문제 분석 🔸 n개의 마을이 일렬로 주어지며 n-1개의 도로가 있다. 마을마다 1L당 기름값이 주어지며, 도로 1km당 기름 1L가 필요하다. 최종 기름값의 최소값을 출력한다. 전형적인 그리디 알고리즘 문제이다. 가장 가성비 좋게 기름을 구입하기 위해서, 최종 도시에서 거꾸로 빼는 방식으로 계산한다. 도로의 길이와 도시 별 기름값의 최대 값이 10억이므로 long형을 사용한다. 🔸 코드 🔸 import java.io.BufferedR..
👉 문제링크 2057번: 팩토리얼 분해 음 아닌 정수 N이 주어졌을 때, 이 수를 서로 다른 정수 M(M ≥ 1)개의 팩토리얼의 합으로 나타낼 수 있는지 알아내는 프로그램을 작성하시오. 예를 들어 2=0!+1!로 나타낼 수 있지만, 5는 이와 같은 www.acmicpc.net 🔸 문제 분석 🔸 팩토리얼의 조합으로 n을 만들 수 있는지 판단한다. n보다 작은 팩토리얼을 큰 수부터 n을 빼며 0을 만들 수 있는지 확인한다(그리디) 🔸 코드 🔸 fact = [0] * 20 fact[0] = 1 for i in range(1, 20): fact[i] = fact[i-1] * i n = int(input()) if n == 0: print("NO") else: for i in range(19, -1, -1): i..