일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- heapq
- 동적 계획법
- 카카오
- 파이썬
- java
- 정렬
- dfs
- Re
- DateTime
- Set
- lambda
- 위클리 챌린지
- 자바
- programmers
- 프로그래머스
- divmod
- KAKAO BLIND RECRUITMENT
- Zip
- BFS
- 수학
- Combinations
- 재귀함수
- 다익스트라
- 추석맞이 코딩챌린지
- backjoon
- python
- 이분탐색
- 정규식
- 백준
- 그리디
- Today
- Total
목록백준 (84)
상상쓰
https://www.acmicpc.net/problem/1021 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net N이 50 이하의 자연수라 부담 없이 deque를 이용하여 풀었다. 2번을 이용하든 3번을 이용하든 숫자의 순서가 변하지는 않는다. 그러므로 P의 각 숫자를 뽑을 때 최솟값을 다 더해주면 된다. 2번 연산을 기준으로 숫자를 뽑았을 때 연산의 횟수를 x 라고 한다면 3번 연산의 방법을 이용한 연산의 횟수는 N-x 가 된다. import sys from collections import deque..
https://www.acmicpc.net/problem/1038 1038번: 감소하는 수 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 www.acmicpc.net 감소하는 수가 되려면 0 ~ 9 중에서 중복 없이 뽑아 오름차순으로 정렬한 수랑 필요충분조건이 된다. 가장 큰 감소하는 수는 9876543210이며 10C1 + 10C2 + 10C3 + ... + 10C10 = 2^10 - 1 = 1023이며 N = 1022일 때다. (N은 0부터 시작) 즉, N이 1022 보다 크면 -1을 반환하고 그렇지 않으면 combination 과 sort ..
https://www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 한 주에 한 문제! import sys N, K = map(int, sys.stdin.readline().split()) answer = 0 temp = 1 for i in range(N): a = int(sys.stdin.readline()) if K < a: break q, r = divmod(K, a) K -= r answer ..
https://www.acmicpc.net/problem/1091 1091번: 카드 섞기 지민이는 카지노의 딜러이고, 지금 3명의 플레이어(0, 1, 2)가 있다. 이 게임은 N개의 카드를 이용한다. (0 ~ N-1번) 일단 지민이는 카드를 몇 번 섞은 다음에, 그것을 플레이어들에게 나누어 준다. 0 www.acmicpc.net 문제만 이해하면 어렵지 않게 풀 수 있다. 좋은 풀이는 아닌지만 하라는 대로 하면 풀린다. import sys N = int(sys.stdin.readline()) P = list(map(int, sys.stdin.readline().split())) S = list(map(int, sys.stdin.readline().split())) result = [] mix = [i fo..
https://www.acmicpc.net/problem/2668 2668번: 숫자고르기 세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절 www.acmicpc.net 사이클을 만족하면 그 수는 구하고자 하는 집합의 원소가 될 수 있다.(최대로 많이 뽑아야 하기 때문이다.) 또한, 집합의 원소라면 사이클이기 때문에 필요충분조건을 만족하여 해당하는 수를 구하면 된다. 예제 입력을 예로 들면, 1 -> 3 -> 1 : 1이 사이클을 만족하므로 3 또한 사이클을 만족한다. 2 -> 1 -> 3 -> 1 : 2는 사이클을 만족하지 않으므로 집합의 원소가 될..
https://www.acmicpc.net/problem/1011 1011번: Fly me to the Alpha Centauri 우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행 www.acmicpc.net 오랜만에 올립니다. k 광년을 이동했을 때 다음에는 k-1, k, k+1 광년을 이동할 수 있다는 조건과 마지막은 1광년을 남겨야 하는 조건 때문에 최소한의 공간이동은 대칭적인 성격을 가질 수밖에 없다. 1 (1 * 1) 1 1 (2 * 1) 1 2 1 (2 * 2) 1 2 2 1 (3 * 2) 1 2 3 2 1 (3 * 3) 1 2 3 3 2 1 (4..
https://www.acmicpc.net/problem/2293 2293번: 동전 1 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. www.acmicpc.net dp[k] = k원을 만들 수 있는 경우의 수 n번 돌 때마다 dp 배열은 갱신된다. (n번째는 n개의 수를 가지고 k원을 만들 수 있는 경우의 수) import sys n, k = map(int, sys.stdin.readline().split()) dp = [0] * (k+1) dp[0] = 1 for i in range(1, n+1): m = int(sys.stdin.readline()) fo..
https://www.acmicpc.net/problem/15989 15989번: 1, 2, 3 더하기 4 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 4가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 합을 이루고 있는 수의 순서만 다른 것은 같은 것으로 친다. 1+1+1+1 2+1+1 (1+1+2, 1+2+1) 2+2 www.acmicpc.net 숫자 1 만으로 나타내는 방법은 각각 1가지가 있다. dp[i] = 1 다음 2 를 사용해도 된다고 하면 dp[2] = 2 이다. ((1, 1), (2)), dp[3] = 2 이다. ((1, 1, 1), (2, 1)) dp[4] 는 원래 (1, 1, 1, 1) 과 dp[4-2] 인 경우 (1, 1), (2) 에 2를 넣으면 되기 때문에..
https://www.acmicpc.net/problem/2252 2252번: 줄 세우기 첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의 www.acmicpc.net 이렇게 또 하나를 배웠다. 위상 정렬로 조건(이미 정해진 순서)을 가지고 전체를 차례로 수행할 수 있는 경우를 구하는 방법이다. 문제는 위상 정렬이 가능한 경우만 주어지므로 사이클 등의 경우는 무시했다. 또한, 조건에 맞는 답은 여러 가지일 수 있다. 자신의 앞에 학생이 없는 경우(node[i] = 0)인 경우는 가장 먼저 올 수 있다. 이 학생들을 qu..
https://www.acmicpc.net/problem/1916 1916번: 최소비용 구하기 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 www.acmicpc.net 출발 도시와 도착 도시가 같은 버스가 있을 수 있다는 생각을 처음에 못 했다. 그래서 코드를 추가했고 비용이 0인 버스가 있어서 fee = {} 비어있을 때랑 값이 있을 때 나눠서 다익스트라 알고리즘으로 풀었다. import sys from collections import defaultdict, deque N = int(sys.stdin.readline()) M..