본문 바로가기

문제풀이/Programmers49

[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 줄 서는 방법 / Python 문제풀이 해답) import copy def factorial(n): if n == 1: return 1 return n * factorial(n-1) def solution(num, k): if num == 1: return [num] remain_nums = [i for i in range(1, num+1)] cands = [factorial(i) for i in range(num-1, 0, -1)] # 팩토리얼 큰 것 부터 모음 pre_nums = [] # 각 자리를 결정해주는 수 ''' 만약 pre_nums = [1,1,1] 이면 정답 = [2,3,4] ''' k_copy = k # 2번째 방법 때 k 써야돼서 for i in range(num-1): pre_nums.append(((k_copy-1) //.. 2020. 7. 17.
[프로그래머스💯] 코딩테스트 연습 > 등굣길 해답) def solution(m, n, puddles): path = [[0 for _ in range(m)] for _ in range(n)] path[0][0] = 1 for y in range(n): for x in range(m): if [x+1, y+1] in puddles: print("x,y = > ", x, y) continue if x != m-1: path[y][x+1] += path[y][x] if y != n-1: path[y+1][x] += path[y][x] print(path) return path solution(4, 3, [[2, 2]]) 풀이) 이 문제는 동적 계획법의 대표적이면서도 간단한 문제입니다! 동적 계획법 문제의 기본은 중간점까지의 최적해를 계속해서 저장한 뒤 .. 2020. 7. 9.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 시저 암호 🔒 해답) def solution(s, n): def convert(char): if char == " ": return " " elif ord(char) 2020. 6. 8.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 핸드폰 번호 가리기 해답) def solution(phone_number): return "*" * (len(phone_number)-4) + phone_number[-4:] 풀이) *의 개수 : 휴대폰 번호 길이수 - 4 phone_number[-4:] 를 통해, 마지막 4자리 번호를 string 으로 뽑아낸다. * 이 문제 및 로고의 저작권은 Programmers에 있습니다. 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges 2020. 5. 17.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 가장 긴 팰린드롬 해답) def solution(string): end = len(string)-1 def find(i, i2 = -1): res = 2 # 가운데가 2개로 볼때 if i2 == -1: # 가운데 1개 기준으로볼때 i2 = i res = 1 j = 1 # 커지는 수 while i2 + j = 0: if string[i2+j] == string[i-j]: res += 2 else: return res j += 1 return res answer = 1 for i in range(1, len(string)-1): if string[i] == string[i+1]: # 2개짜리 검사 answer = max(answer, find(i), find(i, i+1)) else: answer = max(answer, f.. 2020. 5. 16.
[프로그래머스💯] 코딩테스트 연습 > 동적 계획법 > 정수 삼각형 / 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.