일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- backjoon
- KAKAO BLIND RECRUITMENT
- 동적 계획법
- 수학
- 카카오
- 정렬
- java
- 정규식
- Zip
- 재귀함수
- heapq
- Re
- DateTime
- dfs
- 다익스트라
- Combinations
- python
- BFS
- 그리디
- lambda
- divmod
- programmers
- 위클리 챌린지
- 자바
- 백준
- 파이썬
- 프로그래머스
- 추석맞이 코딩챌린지
- Set
- 이분탐색
- Today
- Total
목록백준 (84)
상상쓰
https://www.acmicpc.net/problem/16953 16953번: A → B 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. www.acmicpc.net 처음에 A 에서 B 로 가면서 중간 횟수를 배열에 담아 최종적으로 B 에 왔을 때의 값을 반환하니 메모리 초과가 났다. 생각해보니, A 에서 계산된 값은 짝수이거나, 1의 자리의 수가 1인 경우밖에 없으므로 B 에서 A 로 가면서 조건에 맞으면 answer 에 1을 더해주고 조건에 맞지 않거나 A 보다 작은 수가 되어 버리면 A 가 될 수 없는 수이므로 -1을 반환하면 된다. import sys A, B = map(int, sys.stdin.readline().split()) answer = 1 while A < B: i..
https://www.acmicpc.net/problem/1449 1449번: 수리공 항승 첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나 www.acmicpc.net 정렬을 이용하여 테이프를 붙이는 위치를 계속 변경하면서 최소 횟수를 구하는 문제로 쉽다. import sys N, L = map(int, sys.stdin.readline().split()) pipe = list(map(int, sys.stdin.readline().split())) pipe.sort() answer = 1 value = pipe[0] for i in range(1..
https://www.acmicpc.net/problem/2437 2437번: 저울 하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓 www.acmicpc.net 재밌는 문제였다. 예를 들어 a1
https://www.acmicpc.net/problem/1439 1439번: 뒤집기 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모 www.acmicpc.net '0' 또는 '1' 이 연속되는 집단의 개수 중 작은 것을 반환하면 된다. 얼마 전에 정규식을 배웠기에 한 번 써봤다. import sys, re S = sys.stdin.readline() answer = min(len(re.findall(r'1+', S)), len(re.findall(r'0+', S))) print(answer)
https://www.acmicpc.net/problem/1080 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net (0, 0) 부터 시작하여 (N-3, M-3) 까지 비교하면서 더는 바꿀 수 없는 구간에 대해서 A[][] 와 B[][] 가 다르면 -1 을 반환한다. 예를 들면 0 열부터 M-3 까지 비교하여 다음 행 차례가 오면 비교했던 행에 M-2 열과 M-1 이 바꿀 수 없는 구간이다. N 이나 M 이 3보다 작으면 3*3 크기의 부분 행렬이 없으므로 같으면 0 다르면 -1 을 반환한다. 이 예외 때문에 계속 틀렸었다...
https://www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net 간단하게 생각해보면 같은 부호끼리는 절댓값이 큰 순서대로 묶어서 계산해야 최댓값이 된다. 양수하고 음수를 묶어야 할 상황에는 묶지 말고 더하는 것이 최댓값이 된다. 주의해야 할 점은 1과 0이다. 1은 무조건 더하는 것이 최댓값이 된다. 그리고 0은 양수랑 남으면 더하는 것이 최대지만, 음수랑 남으면 묶어서 계산하는 것이 최댓값이 된다. 그래서 우선순위 큐를 이용하여 부호에 따라 담을 큐를 두 ..
https://www.acmicpc.net/problem/4796 4796번: 캠핑 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다. www.acmicpc.net 휴가 기간이 20일이고 캠핑장은 연속하는 8일 중 5일만 사용할 수 있다고 하자. 그러면 적어도 캠핑장이 두 번 16일 열릴 것이고 5 * 2 = 10 일을 사용할 수 있다. 남은 4일과 다음 캠핑장이 열렸을 때 사용할 수 있는 기간인 5일과 비교하여 작은 값을 더해주면 휴가 기간 캠핑장을 이용할 수 있는 기간이 된다. 14를 return 하면 된다. import sys C = 0 answe..
https://www.acmicpc.net/problem/1715 1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net 우선순위 큐(heapq) 를 이용해서 가장 작은 2개의 숫자의 합을 계산해주고 그 값을 또 queue 에 넣어준다. 이러한 과정을 반복하여 queue 에는 하나의 값만 남을 때까지 계속한다. 마지막으로 숫자의 합을 계속 더해준 answer 를 return 한다. import sys import heapq answer = 0 N = int(sys.stdin.readline()) que..
https://www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 정답 비율이 약 36% 인데 많이 쉬웠다. 방향은 정해져 있으니 도시를 지나갈 때 현재까지의 가장 낮은 가격으로 계산해주면 된다. import sys answer = 0 N = int(sys.stdin.readline()) distance = sys.stdin.readline().split() price = sys.stdin.readline().split() m = 100000000..
https://www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 주어진 단어에 index 마다 가중치를 부여한다. 같은 index 라도 중복이 일어날 때는 같은 index 의 다른 알파벳보다 가중치를 크게 줘야 하므로 index 의 초기 가중치를 10 ** j 로 한다. import sys from collections import defaultdict N = int(sys.stdin.readline()) dic = defaultdict(int) arra..