일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DateTime
- Combinations
- 다익스트라
- Re
- 자바
- 이분탐색
- 수학
- 추석맞이 코딩챌린지
- dfs
- python
- 그리디
- heapq
- 재귀함수
- 파이썬
- 프로그래머스
- 위클리 챌린지
- programmers
- backjoon
- java
- 백준
- BFS
- divmod
- Set
- KAKAO BLIND RECRUITMENT
- Zip
- 카카오
- 정렬
- lambda
- 동적 계획법
- 정규식
- Today
- Total
목록그리디 (29)
상상쓰
https://www.acmicpc.net/problem/18185 18185번: 라면 사기 (Small) 라면매니아 교준이네 집 주변에는 N개의 라면 공장이 있다. 각 공장은 1번부터 N번까지 차례대로 번호가 부여되어 있다. 교준이는 i번 공장에서 정확하게 Ai개의 라면을 구매하고자 한다(1 ≤ i www.acmicpc.net i, i+1, i+2 공장에 라면이 있는 경우 7원으로 세 개의 라면을 사는 것이 가장 합리적이지만, [1, 2, 1, 1] 의 경우 7원으로 사는 것을 우선적으로 사버리면 [0, 1, 0, 1] 로 다음 번에 무조건 하나씩 사게 되어 최소한의 가격으로 사지 못하는 경우가 발생한다. [1, 2, 1, 1] 의 경우는 먼저 두 개의 공장에서 5원으로 라면을 산 뒤([0, 1, 1,..
https://www.acmicpc.net/problem/1092 1092번: 배 첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보 www.acmicpc.net 시간초과를 방지하기 위해서 크레인을 두 번째 이상 돌릴 때는 정렬된 박스들의 위치를 기억해서 무게 제한보다 무거운 박스인지는 비교하지 않도록 하였다. cranes = [9, 8, 6], boxes = [2, 2, 4, 5, 7] 이라고 가정했을 때, bisect_right 를 이용하여 positions = {9 : 5, 8 : 5, 6 : 4} 즉, 크레인 9번은 1 ~ 5번, 6..
https://www.acmicpc.net/problem/5545 5545번: 최고의 피자 상근이는 근처 피자 가게에서 매일 저녁으로 피자를 배달해 먹는다. 주머니 사정이 얇아진 상근이는 이번 달부터는 "최고의 피자"를 구매하려고 한다. 최고의 피자란, 피자 가게에서 주문할 수 www.acmicpc.net 초기의 값 C // A 를 기준으로 분모와 분자에 값을 계속 더하여 최고의 피자를 찾는 문제이다. 분모는 토핑이 추가될 때마다 일정하게 더해주고(B) 분자에는 토핑의 열량을 더해준다. 즉, 토핑의 열량을 큰 것부터 처리했을 때, answer 이 감소하는 시점부터 토핑의 열량은 계속 전보다 작은 값을 더해주므로 증가하고 감소하는 시점에 break 를 걸어준다. 수학적으로 증명하기는 쉽다. 예를 들면 1과..
https://www.acmicpc.net/problem/2810 2810번: 컵홀더 첫째 줄에 좌석의 수 N이 주어진다. (1 ≤ N ≤ 50) 둘째 줄에는 좌석의 정보가 주어진다. www.acmicpc.net 문제를 잘 읽어보면 커플이 문제다. import sys N = int(sys.stdin.readline()) S = sys.stdin.readline().strip() n = 0 for i in S: if i == 'L': n += 1 answer = N if n == 0 else N - (n // 2) + 1 print(answer)
https://www.acmicpc.net/problem/2812 2812번: 크게 만들기 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. www.acmicpc.net heapq 를 이용하여 처음에 올 수 있는 자리에 수 중 가장 큰 것을 뽑고 index 를 비교하여 다음으로 올 수 있는 수 중에서 가장 큰 값을 차례대로 뽑으면 된다. 예를 들어, N = 10, K = 4, number = 4177252841 라고 하자. 그럼 가장 처음에 올 수 있는 수는 417(1)7(2)2 중 하나의 수가 된다. 52841 중 하나를 택하면 6자리의 수가 될 수 없다. 가장 큰 값인 7과 7의 인덱스(I)를 잡는다. 다음으로, 417(1)7(2)25 ..
https://www.acmicpc.net/problem/16288 16288번: Passport Control 입력은 표준입력을 사용한다. 첫 번째 줄에는 두 개의 정수 N 과 k 가 주어진다. N은 입국 승객의 수이며 k는 여권 심사 창구의 수이다. 단, 2 ≤ k ≤ N ≤ 100 이다. 그리고 두 번째 줄에는 승객이 입 www.acmicpc.net 1 부터 N 까지 k 개의 q 에 차례대로 진입하므로 다 진입했을 때의 q 를 보면 각각 오름차순으로 정렬이 되어야한다. 즉, PI 를 가지고 k 개의 q 로 분할했을 때 오름차순으로 나타낼 수 없다면 'NO' 를 반환하고, 나타낼 수 있다면 'YES' 를 반환한다. import sys N, k = map(int, sys.stdin.readline()...
https://programmers.co.kr/learn/courses/30/lessons/42884 코딩테스트 연습 - 단속카메라 [[-20,15], [-14,-5], [-18,-13], [-5,-3]] 2 programmers.co.kr 정렬을 통하여 차례대로 카메라를 반드시 설치하여야 하는 경우를 세어준다. [-20, 15] 만을 본다면 적어도 15 이하에는 카메라가 설치되어 있어야 한다. 다음 순서인 [-14, -5] 를 봤을 때는 -14 가 -20 보다 크다는 것은 sort() 로 보장되어 있다. 즉, 15 가 -14 보다 크다면 15 와 [-14, -5] 에서 나간 지점은 5 랑 비교하여 작은 값에 카메라를 설치하는 것이 이상적이다. 반대로 작다면, 카메라 1대로 두 구간을 확인하는 것이 불가..
https://www.acmicpc.net/problem/14659 14659번: 한조서열정리하고옴ㅋㅋ 첫째 줄에 봉우리의 수 겸 활잡이의 수 N이 주어진다. (1 ≤ N ≤ 30,000) 둘째 줄에 N개 봉우리의 높이가 왼쪽 봉우리부터 순서대로 주어진다. (1 ≤ 높이 ≤ 100,000) 각각 봉우리의 높이는 중복 없이 www.acmicpc.net 차례대로 진행하면서 기준점으로부터 연속적으로 오는 작은 값들의 개수를 확인하면서 최종적으로 가장 큰 개수를 반환하면 된다. import sys N = int(sys.stdin.readline()) H = list(map(int, sys.stdin.readline().split())) answer = 0 b = 0 for i in range(1, N): if ..
https://www.acmicpc.net/problem/13904 13904번: 과제 예제에서 다섯 번째, 네 번째, 두 번째, 첫 번째, 일곱 번째 과제 순으로 수행하고, 세 번째, 여섯 번째 과제를 포기하면 185점을 얻을 수 있다. www.acmicpc.net 아래와 같이 점수를 내림차순으로 날짜가 중복된다면 중복이 생기지 않을 때까지 d 를 1 씩 감소한다. d 가 0 이라는 것은 과제를 포기해야 하는 상황이다. import sys from collections import defaultdict N = int(sys.stdin.readline()) answer = 0 dic = defaultdict(int) subject = [] for i in range(N): subject.append(li..
https://www.acmicpc.net/problem/2847 2847번: 게임을 만든 동준이 학교에서 그래픽스 수업을 들은 동준이는 수업시간에 들은 내용을 바탕으로 스마트폰 게임을 만들었다. 게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어 www.acmicpc.net scores 배열을 역순으로 점수를 비교해가며 구해주면 된다. import sys N = int(sys.stdin.readline()) scores = [] answer = 0 M = 20001 for i in range(N): scores.append(int(sys.stdin.readline())) for i in scores[::-1]: if M