일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 수학
- lambda
- python
- 그리디
- backjoon
- 정규식
- dfs
- Zip
- divmod
- BFS
- 카카오
- DateTime
- 파이썬
- Set
- 백준
- programmers
- Combinations
- Re
- 추석맞이 코딩챌린지
- 다익스트라
- 자바
- 동적 계획법
- 이분탐색
- java
- KAKAO BLIND RECRUITMENT
- Today
- Total
목록파이썬 (161)
상상쓰
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://programmers.co.kr/learn/courses/30/lessons/92342 코딩테스트 연습 - 양궁대회 문제 설명 카카오배 양궁대회가 열렸습니다. 라이언은 저번 카카오배 양궁대회 우승자이고 이번 대회에도 결승전까지 올라왔습니다. 결승전 상대는 어피치입니다. 카카오배 양궁대회 운영위원 programmers.co.kr 이 문제를 작년에 2022 KAKAO BLIND RECRUITMEMT 에서 풀었을 때는 DFS로 접근하였다. 이번에는 product 를 이용하여 경우의 수 2,048개를 구해놓고 조건에 맞으면 해당 점수의 차이와 라이언의 기록을 기억하여 점수가 크거나, 점수가 같을 때는 낮은 점수의 과녁을 많이 맞힌 기록을 새로이 기억하여 마지막으로 기억하는 라이언의 기록을 반환한다..
https://programmers.co.kr/learn/courses/30/lessons/92341 코딩테스트 연습 - 주차 요금 계산 [180, 5000, 10, 600] ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"] [14600, 34400, 5000] programmers.co.kr 오랜만에 풀어서 그런지 문법들이 기억이 잘 안 난다. dictionary 를 이용하여 입차 시간과 출차 될 때 주차시간을 기록한다. import math def solution(fees..
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..
https://www.acmicpc.net/problem/1806 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net 받은 배열을 순서대로 이동하면서 합을 구한 뒤 그 합이 S 를 넘으면 k = 0 을 시작으로 1씩 더해주면서 temp 가 S 보다 작아질 때까지 array[k] 를 빼준다. 이때 연속된 수들의 부분합이 S 를 넘어가는 길이는 i - k + 2 이며 그 중 최솟값을 반환하면 된다. import sys N, S = map(int, sys.stdin.readline().split()) a..