파이썬
-
백트래킹> 15649. N과 M (1)ALGORITHM/BAEKJOON 2020. 9. 21. 19:24
15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 문제설명: 숫자 N과 M이 주어지고, 1부터 N까지의 숫자를 활용하여 M개 길이의 수열을 만들어 출력하면 된다. [1차 시도] def find(cur,cnt): #(2) global N,M #(3) if cnt == M: print(' '.join(cur)) return else: #(4) visited[int(cur[-1])] = 1 for i in range(1, N + 1): #(5) if not visited[i]: visited[i] = 1 #(6) f..
-
브루트 포스> 2231. 분해합ALGORITHM/BAEKJOON 2020. 9. 18. 08:34
2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 문제설명: 숫자 N이 주어지고, 각 자리 수와 해당 값의 합으로 이 N을 만들 수 있는 숫자들 중 가장 작은 숫자를 찾는 문제이다. 만약 이처럼 만들 수 없다면, 0을 출력해야 한다. [1차 시도] N = int(input()) minV = 1000000000 check = N while check>N//2: sumup = 0 num = check while num>0: sumup+=num%10 num //=10 if check+su..
-
그리디 알고리즘> 11047. 동전 0ALGORITHM/BAEKJOON 2020. 9. 17. 09:40
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 문제설명: N개 종류의 동전이 주어지고, N개의 종류별 동전들을 적절히 사용해 그 합을 K로 만드는 동전의 최소 개수를 구하는 문제이다. [1차 시도] N, K = map(int,input().split()) coin = [int(input()) for x in range(N)] ans = 0 coin_sum = 0 originK = K for i in range(N-1,-1,-1): if coin[i]
-
브루트 포스> 7568. 덩치ALGORITHM/BAEKJOON 2020. 9. 15. 10:52
7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x,y)로 표시된다. 두 사람 A 와 B의 덩� www.acmicpc.net 문제설명: 각 사람의 몸무게와 키가 주어지고, 서로의 몸무게와 키를 비교하는데 자신보다 몸무게와 키가 모두 큰 사람의 수+1이 자신의 등수가 된다. 이 때 등수의 중복은 허용된다. [1차 시도] N = int(input()) ans = [] people = [] for _ in range(N): weight, height = map(int,input().split()) people.append([weight,height]) for i in peopl..
-
코딩테스트 연습> 2020 카카오 인턴십> 키패드 누르기ALGORITHM/Programmers 2020. 9. 10. 23:43
코딩테스트 연습 - 키패드 누르기 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL" programmers.co.kr 문제설명: 키패드에 입력할 번호들의 배열 numbers가 주어지고 1,4,7은 왼손으로, 3,6,9는 오른손으로, 그리고 나머지 2,5,8,0은 현재 위치의 왼손과 오른손 중 가까운 거리의 손가락으로 누르면 된다. 만약 거리가 같다면, hand에 주어진 손가락으로 누르면되고, 키패드 번호를 누를때마다, 현재 누른 손가락의 위치를 갱신해주면 된다. [1차..
-
코딩테스트 연습> 탐욕법(Greedy)> 구명보트ALGORITHM/Programmers 2020. 8. 14. 07:00
코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 문제설명: people로 주어지는 배열에 사람들의 몸무게가 주어지고, limit 변수로 구명보트의 제한 무게가 주어진다. 구명보트 1개는 한 번에 최대 2명씩 태울 수 있으므로 모든 사람을 구출하기 위해 필요한 구명보트의 최소개수를 구하는 문제이다. [1차 시도] def solution(people, limit): ans = 0 people.sort(reverse=True) start = len(people)-1 for i in ran..
-
코딩테스트 연습> Summer/Winter Coding(~2018)> 예산ALGORITHM/Programmers 2020. 7. 26. 01:12
코딩테스트 연습 - 예산 S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 �� programmers.co.kr 문제설명: d배열로 주어지는 예산들 중 합산했을 때 budget 범위를 넘지 않는 최대의 예산 개수를 알아내는 문제이다. 최대한 많은 종류의 예산을 선택해야하므로, 오름차순으로 정렬한 후 앞의 숫자부터 차례대로 보면서 budget이 넘지 않을 때까지 count를 해주면 될 것 같다. [1차 시도] import heapq def solution(d, budget): cnt = 0 heapq.heapify(d) while d: if budget - d[0] >=0..
-
코딩테스트 연습> 스택/큐> 쇠막대기ALGORITHM/Programmers 2020. 7. 24. 23:25
문제설명: 여는 괄호와 닫는 괄호로 이루어진 문자열이 주어지고, 여는 괄호 '('가 나올 때마다 막대기가 생성된다. 중간에 괄호과 완성되면, 즉 '()'이 만나게되면 레이저를 발사해 현재까지 생성된 막대기를 두 동강낸다. 이렇게 했을 때 누적된 막대기가 잘려나간 조각들의 총 합을 구하면 된다. [1차 시도] def solution(arrangement): ans = 0 ## 조각 개수 temp = 1 ## 막대기 개수 for a in range(1,len(arrangement)): if arrangement[a] == '(': temp+=1 else: if arrangement[a-1]=='(': temp-=1 ans+=temp else: ## '))' temp-=1 ans+=1 return ans 풀이..