일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스타트 택시
- 12865번
- 2020 카카오 인턴십
- 17144번
- SW Expert Academy
- 거울 설치
- 12869번
- 수식 최대화
- 프로그래머스
- 9095번
- SW ExpertAcademy
- 빛의 경로 사이클
- 어른 상어
- 미세먼지 안녕!
- 베스트엘범
- 보석 쇼핑
- 15686번
- 1789번
- 19238번
- 1038번
- 경주로 건설
- 16234번
- 14499번
- QueryDSL 기초
- HTML 기초
- 감소하는 수
- 키패드 누르기
- 파이썬
- 백준 알고리즘
- python
- Today
- Total
목록백준 알고리즘 (28)
보물창고 블로그
문제 링크: www.acmicpc.net/problem/1038 1038번: 감소하는 수 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 �� www.acmicpc.net 문제는 N번째 감소하는 수를 구하는 것입니다. 처음에 이 문제를 보면 상당히 막막하지만, 천천히 생각해보면 의외로 간단합니다. 저는 1 자릿수부터 10 자릿수까지(9876543210) 천천히 숫자를 만들고 이때마다 count 수를 늘려서 count수가 N과 같아질 때 감소하는 수를 출력하도록 하였습니다. 파이썬으로 해결한 코드는 아래와 같습니다. import sys n = int..
문제 링크: www.acmicpc.net/problem/1789 1789번: 수들의 합 첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다. www.acmicpc.net 문제는 '서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?'입니다. 서로 다른 N개의 자연수의 합이 S라고 할 때 N을 최댓값으로 하기 위해서는 1부터 작은 수들을 차례대로 더하여 S보다 커질 때보다 1개 적을 때가 N의 최댓값입니다. 예제를 보면 200이 주어졌을 때, 1부터 20까지 더하면 210이 되고 1부터 19까지 더하면 190이 됩니다. 따라서 1부터 18까지 더하고 200까지 모자란 수를 마지막 수로 정하면 19개가 최대가 됩니다. 그렇다면 N의 최댓값은 어디까..
문제 링크: www.acmicpc.net/problem/12869 12869번: 뮤탈리스크 1, 3, 2 순서대로 공격을 하면, 남은 체력은 (12-9, 10-1, 4-3) = (3, 9, 1)이다. 2, 1, 3 순서대로 공격을 하면, 남은 체력은 (0, 0, 0)이다. www.acmicpc.net 저는 SCV의 개수에 따라 CASE분류를 통하여 문제를 해결하였습니다. 먼저 SCV수가 1마리일 경우 SCV체력을 9로 나누어 나머지가 0일 경우 몫을 출력하고 아닐 경우 몫+1의 값을 출력하였습니다. SCV가 2마리 이상일 경우에는 DFS(깊이 우선 탐색)으로 문제를 해결하였습니다. 만약 현재 최소의 횟수보다 같거나 높아진다면 분기하지 않는 백 트레킹을 사용하였고, 한 번만 탐색한 것을 체크하기 위해 SC..
문제 링크: https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 이 문제는 대표적인 DP(다이내믹 프로그래밍) 문제입니다. 소스 코드는 아래와 같습니다. 재귀는 쓰지 않았습니다. import sys n, k = map(int, sys.stdin.readline().split()) cost = [[0] * (k + 1) for _ in range(n + 1)] backpack = [l..