일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 5와 6의 차이
- 대체 암호화
- 전자 메일
- Pop
- 백준
- 파이썬
- DES 알고리즘
- 2 + 1 세일
- 나동빈
- 컴퓨터 네트워크
- 컬럼 암호화
- 사과 담기 게임
- 소가 길을 건너간 이유3
- 한빛미디어
- 코딩 테스트
- JoCoding
- 그리디 알고리즘
- 거스름돈
- 통나무 건너기
- 동적 계획 알고리즘
- 욱제는 효도쟁이야!!
- ZOAC 2
- 세탁소 사장 동혁
- 문자 변환표
- 위치 암호화
- 비연결형 통신
- 시저 암호화
- 구현
- 키워드 암호화
- Greedy
- Today
- Total
목록전체 글 (42)
주니어로서의 백 걸음, 개발자로서의 한 걸음

문제 풀이: 전자레인지 문제와 비슷하게 풀면 된다. n = int(input()) for _ in range(n): m = int(input()) for i in [25, 10, 5, 1]: print(m // i, end=' ') m = m % i

문제 풀이: 거스름돈 문제와 비슷하게 풀면 된다. 시간을 300초, 60초, 10초로 각각 나누어 몫을 출력한다. 만약 n이 가장 작은 시간인 10으로 나누어 떨어지지 않는다면 -1을 출력한다. m = int(input()) t = [300, 60, 10] if m % 10 != 0: print(-1) else: for i in t: print(m // i, end =' ') m %= i

문제 풀이: 로프를 병렬로 연결하면 각 로프에는 w / k 만큼의 동일한 중량이 걸린다. 즉, 가장 작은 무게를 들 수 있는 로프가 들 수 있는 질량 * 병렬연결 로프의 개수 예를 들어 로프가 들 수 있는 중량이 다음과 같다면 [100, 80, 60, 40, 20] 중량 100을 들 수 있는 로프 한 개를 사용했을 때 들 수 있는 무게: 100 중량 80을 들 수 있는 로프 두 개를 사용했을 때 들 수 있는 무게: 80 * 2 = 160 중량 60을 들 수 있는 로프 세 개를 사용했을 때 들 수 있는 무게: 60 * 3 = 180 중량 40을 들 수 있는 로프 네 개를 사용했을 때 들 수 있는 무게: 40 * 4 = 160 중량 20을 들 수 있는 로프 다섯 개를 사용했을 때 들 수 있는 무게: 20 *..

문제 풀이: 가장 큰 화폐단위부터 비교하며 액수가 큰 화폐를 최대한 많이 사용하면 된다. 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