일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- Pop
- 거스름돈
- 대체 암호화
- JoCoding
- 전자 메일
- 세탁소 사장 동혁
- Greedy
- 키워드 암호화
- 욱제는 효도쟁이야!!
- 한빛미디어
- 통나무 건너기
- 그리디 알고리즘
- 사과 담기 게임
- DES 알고리즘
- 동적 계획 알고리즘
- 문자 변환표
- 5와 6의 차이
- 코딩 테스트
- 소가 길을 건너간 이유3
- 나동빈
- 백준
- 컴퓨터 네트워크
- 시저 암호화
- 컬럼 암호화
- 2 + 1 세일
- 비연결형 통신
- 위치 암호화
- 파이썬
- ZOAC 2
- 구현
- Today
- Total
목록그리디 알고리즘 (31)
주니어로서의 백 걸음, 개발자로서의 한 걸음

문제 풀이: 가장 큰 화폐단위부터 비교하며 액수가 큰 화폐를 최대한 많이 사용하면 된다. n = int(input()) c = 1000 - n cnt = 0 m = [500, 100, 50, 10, 5, 1] for i in m: if c == 0: break cnt += c // i c %= i print(cnt)

문제 풀이: S의 최솟값을 구하기 위해서 A배열의 가장 작은 요소와 B배열의 가장 큰 요소를 곱하고 그다음으로 작은 수와 큰 수를 반복해서 곱하고 더해주면 된다. 즉 A배열은 오름차순으로 정렬하고 B배열은 내림차순으로 정렬해서 각각 인덱스끼리 곱해서 더해주면 간단하게 풀 수 있다. 하지만!! 문제에서 B배열은 재배열하면 안 된다고 명시되어있기 때문에 다른 방법을 이용해서 풀어야 한다. A배열은 재정렬이 가능하기 때문에 A를 오름차순으로 정렬하고 B의 가장 큰 값을 뽑아서 곱해준 더하는 방식으로 문제를 해결하면 된다. n = int(input()) a_list = list(map(int, input().split())) b_list = list(map(int, input().split())) s = 0 f..

문제 풀이: 화폐 가치가 큰 것부터 비교하면서 거스름돈을 가장 크게 나누어줄 수 있는 화폐를 사용하여 동전의 개수를 구한다. n, k = map(int, input().split()) l=[0]*n cnt = 0 for i in range(n): l[i] = int(input()) l.sort(reverse=True) for i in range(n): cnt += k // l[i] k %= l[i] print(cnt)

https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 문제 풀이: 인출하는 데 걸리는 시간이 짧은 순서대로 하면 뒤에서 누적되어 대기하는 시간이 줄어들기 때문에 대기 시간이 적은 숫자가 앞에 가야 시간이 최소가 된다. n = int(input()) t = list(map(int, input().split())) t.sort() #두 번째 사람부터 시간이 누적된다. for i in range(1, len(t)): t[i] = t[i - 1] + t[i] print(sum(t))
어떠한 수 N이 1이 될 때까지 다음의 두 과정 중 하나를 반복적으로 선택하여 수행하려고 한다. 단, 두 번째 연산은 N이 K로 나누어 떨어질 때만 선택할 수 있다. N에서 1을 뺀다. N을 K로 나눈다. 예를 들어 N이 17, K가 4라고 가정하자, 이때 1번의 과정을 한 번 수행하면 N은 16이 된다. 이후에 2번의 과정을 두 번 수행하면, N은 1이 된다. 결과적으로 이 경우 전체 과정을 실행한 횟수는 3이 된다. 이는 N을 1로 만드는 최소 횟수이다. N과 K가 주어질 때, N이 1이 될 때까지 1번 혹은 2번의 과정을 수행해야 하는 최소 횟수를 구하는 프로그램을 작성해 보자. 입력 조건 첫째 줄에 N(2

숫자 카드 게임은 여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임이다. 단, 게임의 룰을 지키며 카드를 뽑아야 하고 룰은 다음과 같다. 숫자가 쓰인 카드들이 N x M 형태로 놓여 있다. 이때 N은 행의 개수를 의미하며, M은 열의 개수를 의미한다. 먼저 뽑고자 하는 카드가 포함되어 있는 행을 선택한다. 그다음 선택된 행에 포함된 카드들 중 가장 숫자가 낮은 카드를 뽑아야 한다. 따라서 처음에 카드를 골라낼 행을 선택할 때, 이후에 해당 행에서 가장 숫자가 낮은 카드를 뽑을 것을 고려하여 최종적으로 가장 높은 숫자의 카드를 뽑을 수 있도록 전략을 세워야 한다. 예를 들어 3 x 3 형태로 카드들이 다음과 같이 놓여 있다고 가정하자. 여기서 카드를 골라낼 행을 고를 때 첫 번째..
큰 수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 법칙이다. 단, 배열의 특정한 인덱스(번호)에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다. 예를 들어 순서대로 2, 4, 5, 4, 6으로 이루어진 배열이 있을 때 M이 8이고, K가 3이라고 가정하자, 이 경우 특정한 인덱스에 해당하는 수가 연속해서 세 번까지만 더해질 수 있으므로 큰 수의 법칙에 따른 결과는 6 + 6 + 6 + 5 + 6 + 6 + 6 + 5인 46이 된다. 단, 서로 다른 인덱스에 해당하는 수가 같은 경우에도 서로 다른 것으로 간주한다. 예를 들어 순서대로 3, 4, 3, 4, 3으로 이루어진 배열이 있을 때 M이 7이고, K가 2라고 가정하자..