17521번: Byte Coin 입력은 표준입력을 사용한다. 첫 번째 줄에 요일 수를 나타내는 양의 정수 n과 초기 현금 W(1 ≤ n ≤ 15, 1 ≤ W ≤ 100,000)가 주어진다. 다음 n 개의 줄에서, i번째 줄은 i일의 바이트 코인 가격을 나 www.acmicpc.net 1. 문제 내용 2. 접근 방식 최대 수익은 극소값에서 사고, 극대값에서 팔기를 반복하면 된다. 극소값은 함수가 감소에서 증가로 바뀌는 지점이고, 극대값은 증가에서 감소로 바뀌는 지점이다. 코인을 사고 팔 때, 현재 가지고 있는 coin 개수와의 연관 관계 s 리스트를 순환하면서 언제가 극대값이고, 언제가 극소값인지 파악을 하기 위해선 coin 개수를 함께 고려해야 한다. 위 그래프로 예시를 들어보자. 극소값이 4일째인 2라..
1246번: 온라인 판매 첫째 줄에 정수 N(1 ≤ N ≤ 1,000)과 M(1 ≤ M ≤ 1,000)이 입력된다. 둘째 줄부터 M+1번째 줄까지 i+1번째 줄에는 Pi(1 ≤ Pi ≤ 1,000,000)가 입력된다. www.acmicpc.net 1. 문제 내용 2. 접근 방식 최대 수익은 최대한 가격이 높을수록 발생할 가능성이 높다. 따라서 우선 Pi를 내림차순 정렬한다. 이후 P0 가격 * 1개의 판매 가격과 P1 가격 * 2개의 판매 가격을 비교한다. 이것을 N > M일 경우에는 M번, N m else n for i in range(loop): temp = ps[i] * (i + 1) if profit
10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 1. 문제 내용 2. 접근 방식 미르코가 만들고 싶어하는 수가 존재하지 않는 경우? 가장 기본적으로 30의 배수는 무조건 일의 자리 숫자가 0이다. 따라서 입력 받은 수에 0이 없다면 무조건 -1이 출력되어야 한다. 입력받은 수의 숫자를 가장 큰 순으로 재배치한 후 30으로 나눈다. 즉, 입력 받은 수가 2104라면 각 숫자는 2, 1, 0, 4이고, 이를 큰 순으로 배치하면 4210이다. 이렇게 새로 구한 숫자가 30의 배수인지 확인한다. 3. 정답 코드 list..
19939번: 박 터뜨리기 $N$개의 공을 $K$개의 바구니에 문제의 규칙을 만족하면서 나눠 담을 수 있다면, 가장 많이 담긴 바구니와 가장 적게 담긴 바구니의 공의 개수 차이를 출력한다. 나눠 담을 수 없는 경우에는 -1을 www.acmicpc.net 1. 문제 내용 2. 접근 방식 나눠 담을 수 없는 경우는 언제인가? 문제를 쪼개서 접근하고자 먼저 답을 도출할 수 없는 상황을 고민하였다. 예를 들어 k = 3이라면, 공은 최소 3 + 2 + 1 = 6개는 있어야 한다. 따라서 k + (k - 1) + (k - 2) + ... + 1보다 n이 작을 때는 정답을 구할 수 없다. 답을 구할 수 있을 때는, 규칙이 무엇인가? n = 10, k = 4 ▶ 1, 2, 3, 4 (3) n = 11, k = 4 ▶..
1758번: 알바생 강호 첫째 줄에 스타박스 앞에 서 있는 사람의 수 N이 주어진다. N은 100,000보다 작거나 같은 자연수이다. 둘째 줄부터 총 N개의 줄에 각 사람이 주려고 하는 팁이 주어진다. 팁은 100,000보다 작거나 같 www.acmicpc.net 1. 문제 내용 2. 접근 방식 많은 팁을 주려는 손님을 먼저 받자 많은 팁을 주려는 손님의 등수를 높임으로써 팁에서 마이너스 되는 값을 줄이면 팁의 최대값을 구할 수 있다. 따라서 입력 받은 팁을 내림차순 정렬한 후, 순서대로 손님을 받으면 된다. 3. 정답 코드 import sys input = sys.stdin.readline n = int(input()) data = [int(input()) for _ in range(n)] data.s..