본문 바로가기

programmers13

[프로그래머스💯] 코딩테스트 연습 > 동적 계획법 > 정수 삼각형 / Python 문제풀이 해답) def solution(triangle): answer = 0 length = len(triangle) # length+1 한 이유 : 맨밑줄 index 넘어가도 오류안나게 maxPath = [[0 for _ in range(length+1)] for _ in range(length+1)] maxPath[0][0] = triangle[0][0] for i in range(length-1): for j in range(i+1): # 왼쪽 밑 보고 갱신 if maxPath[i][j] + triangle[i+1][j] > maxPath[i+1][j]: maxPath[i+1][j] = maxPath[i][j] + triangle[i+1][j] # 오른쪽 밑 보고 갱신 if maxPath[i][j] + t.. 2020. 5. 10.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 행렬의 곱셈 해답) 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.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 야근 지수 / 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.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 핸드폰 번호 가리기 해답) 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 문제풀이 해답) 해답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.