ALGORITHM/Programmers
-
코딩테스트 연습> 그래프 > 순위ALGORITHM/Programmers 2021. 3. 9. 18:46
코딩테스트 연습 - 순위 5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2 programmers.co.kr 문제설명: results 배열 안에 A,B 두 선수가 리스트로 담겨있고, A>B 앞에있는 숫자(A)가 뒤에오는 숫자(B)를 이겼다는 의미이다. 예제로 나와있는 results의 경우 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 이므로, 4 > 3 4 > 2 3 > 2 1 > 2 2> 5 이고 이를 다시 정리해본다면 4 > 3 > 2 4 > 2 > 5 1 > 2 의 구조로 살펴볼 수 있다. 즉 win과 lose 딕셔너리를 생성한 다음 아래와 같은 구조로 값을 저장한다: 1. win에는 나(Key): 나에게 진사람들(Value) 2. lose에는..
-
코딩테스트 연습> 2019 카카오 개발자 겨울 인턴십> 크레인 인형뽑기 게임ALGORITHM/Programmers 2020. 10. 24. 10:04
코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 programmers.co.kr 문제설명: 인형뽑기 통(?)이 board 배열로 주어지고, 뽑기 기계가 움직이는 방향을 담은 moves 배열이 주어진다. moves 방향에 따라 기계가 이동하면서 인형들을 뽑아 임시 바구니에 차곡차곡 담는다. 이때, 같은 모양의 인형이 2개가 만나면, 터지면서 사라진다. 이 때, 사라지는 인형들의 개수를 모두 더해 최종 ans로 return 하면 된다. [1차 시도] def solution(board, moves): ans = 0 basket = [] for i in moves: i-=1..
-
코딩테스트 연습> 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 풀이..
-
코딩테스트 연습> 탐욕법(Greedy)> 큰 수 만들기ALGORITHM/Programmers 2020. 7. 22. 22:25
코딩테스트 연습 - 큰 수 만들기 programmers.co.kr 문제설명: number로 주어지는 숫자들 중 k개 만큼 제거 후 남는 숫자들로 가장 큰 수를 만들어야 한다. 단 주의할 점은, 숫자들의 순서를 섞으면 안된다. 즉 앞에서부터 차례대로 제거하며 가장 큰수를 return 해야 한다. [1차 시도] def solution(number, k): number = list(number) cur = 1 ans_len = len(number) while len(number)!= ans_len-k and cur!= len(number): if int(number[cur-1]) < int(number[cur]): h = cur while h!=0 and int(number[h-1]) < int(number[..
-
코딩테스트 연습> 스택/큐> 다리를 지나는 트럭ALGORITHM/Programmers 2020. 7. 18. 18:34
코딩테스트 연습 - 다리를 지나는 트럭 트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이�� programmers.co.kr 문제설명: 다리를 지나려고 대기중인 트럭들의 배열인 truck_weights가 주어지고, 다리가 지탱할 수 있는 트럭의 무게 weight가 주어진다. 그리고 다리의 길이는 bridge_length로 주어지는데 트럭이 움직이는 이동거리라고 볼 수 있다. 다리위의 트럭의 무게를 보면서 트럭이 다리를 지날 수 있는경우와 앞의 트럭들이 다 빠질 때까지 기달리는 로직을 적절히 짜서 문제를 해결할 수 있다. 그러면서 다리를 건너는 트럭들이 한칸씩 움직이..