본문 바로가기

문제풀이66

[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 야근 지수 / 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.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 핸드폰 번호 가리기 해답) def solution(phone_number): return "*" * (len(phone_number)-4) + phone_number[-4:] 풀이) 파이썬은 문자열여러개를 * 연산을 통해 붙일 수 있습니다. 예) '테스트' * 4 = '테스트테스트테스트테스트' 휴대폰번호 길이보다 4 만큼 작은 길이의 * 을 붙여준 후 휴대폰번호 뒷자리 4개를 슬라이싱해서 붙여줍니다. * 이 문제 및 로고의 저작권은 Programmers에 있습니다. 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges 2020. 3. 18.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 멀리 뛰기 > / Python 문제풀이 (2가지방법) 해답) 해답1 - 재귀 import sys sys.setrecursionlimit(10 ** 6) def solution(n): cached = [-1 for _ in range(n+1)] cached[0] = 1 cached[1] = 1 def find(num): if cached[num] != -1: return cached[num] cached[num] = find(num-2) + find(num-1) return cached[num] return find(n) % 1234567 해답2 - 재귀 X def solution(n): res = [0 for _ in range(n+1)] res[0] = 1 res[1] = 1 for i in range(2, n+1): res[i] = res[i-1] + .. 2020. 3. 13.
[프로그래머스💯] 코딩테스트 연습 > 문자열 내림차순으로 배치하기 / Python 문제풀이 해답) 해답1. def solution(s): return "".join(sorted(s, reverse=True)) 해답2. from functools import reduce def solution(s): return reduce(lambda x, y: x+y, sorted(s, reverse=True)) 해답2. 풀이) sorted 는 리스트 입력받아 정렬된 리스트를 반환합니다. (입력 : 리스트 / 출력 : 정렬된 리스트) * reverse=True라는 키를 이용해서 내림차순으로 정렬이 가능합니다. join 은 리스트를 입력받아 리스트 요소들을 선택한 이은 str 을 반환합니다. (입력 : 리스트 / 출력 : 특정 문자로 이어진 문자열) sorted(s, reverse=True) 의 결과 : ['.. 2020. 3. 13.