본문 바로가기

문제풀이/Programmers49

[프로그래머스💯] 코딩테스트 연습 > 이분탐색 > 징검다리 해답) def solution(distance, rocks, n): rocks.sort() rocks.append(distance) answer = 0 l, r = 0, distance while l rocks[i] - prevRock: removeRock += 1 # print("removeRock") else: cand = min(cand, rocks[i] - prevRock) prevRock = rocks[i] if removeRock n: r = minDistance-1 return answer 풀이) 처음 겪는사람에겐 너무나도 어려울 수 있는 이분탐색 문제입니다.. 하지만 한 번만 이해하고 나면 나중에 나오는 문제들에는 큰 어려움 없이 수월해 질 수 있습니다! 화이팅! 키 포인트 보통 문제를 처.. 2020. 4. 20.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 행렬의 곱셈 해답) import numpy as np def solution(arr1, arr2): answer = np.dot(np.array(arr1), np.array(arr2)) return answer.tolist() 풀이) 사실 직접 코딩으로도 구현할 수 있는데. numpy라는 라이브러리는 다차원배열의 계산을 매우 편하게 해준다. dot 혹은 matmul 을 통해 바로 곱셈을 구현할 수 있다. tolist() 는 numpy 형태의 배열(혹은벡터) 를 다시 리스트 타입으로 만들어준다. * 이 문제 및 로고의 저작권은 Programmers에 있습니다. 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges 2020. 4. 7.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 행렬의 덧셈 해답) def solution(arr1, arr2): answer = [] for _arr1, _arr2, in zip(arr1, arr2): row = [] for __arr1, __arr2 in zip(_arr1, _arr2): row.append(__arr1 + __arr2) answer.append(row) return answer 풀이) * zip 함수는 이터러블 2개를 묶어 튜플 이터러블로 만들어준다. list(zip([1,2,3] , ['a','b','c'])) = [(1,'a'), (2,'b'), (3,'c')] row 에다가 append 하고 총 행렬에 row들을 append 한다. * 이 문제 및 로고의 저작권은 Programmers에 있습니다. 출처: 프로그래머스 코딩 테스트 연습, .. 2020. 4. 7.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 야근 지수 / Python 문제풀이 해답) import heapq def solution(n, works): maxHeap = [] for w in works: heapq.heappush(maxHeap, -w) while n > 0: DoWork = -heapq.heappop(maxHeap) - 1 if DoWork == -1: # 할일을 다함 return 0 heapq.heappush(maxHeap, -DoWork) n -= 1 res = 0 for fatigue in maxHeap: # 남은 일 피로도 계산 res += fatigue ** 2 return res 풀이) 3단계 문제치고 난이도가 쉽다. 1. 가장 많이 남은일을 먼저하는게 항상 최종 피로도를 줄여준다. (그리디하게 구현 가능) 2. 그러므로 현재 가장 많이 남은일을 계속 .. 2020. 3. 29.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 하노이의 탑 / Python 문제풀이 해답) def solution(n): res = [] blocks = [1, 2, 3] def getLastBlock(block1, block2): for b in blocks: if b != block1 and b != block2: return b def move(blockCount, start, dest): if blockCount == 1: return res.append([start, dest]) lastBlock = getLastBlock(start, dest) move(blockCount-1, start, lastBlock) # 일단 나머지 블록에 옮긴다. res.append([start, dest]) # 맨밑 블록 하나를 목적지에올린다. move(blockCount-1, lastBlock,.. 2020. 3. 22.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > N개의최소공배수 해답) import functools import sys sys.setrecursionlimit(10 ** 6) def solution(arr): def getGCD(a, b): if a==0: return b if a < b: a, b = b, a return getGCD(a%b, b) def getLCM(a, b): factor = getGCD(a, b) return int(a*b / factor) return functools.reduce(getLCM, arr) 풀이) LCM : 최소공배수 r : 최대공약수 a = r * a' b = r * b' LCM = r * a' * b' 따라서 a, b 의 최소공배수 = a * b / r ( LCM = a*b/r) 이를 이용해서 풀면 된다. 0) setrec.. 2020. 3. 19.