본문 바로가기

문제풀이66

[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 줄 서는 방법 / 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.
[백준] 1978번 소수찾기 😁 / 비트마스킹 / Python 문제풀이 풀이) 에라토스테네스의 체 방식을 이용하여 소수 갯수를 출력해주면 됩니다! 에라토스테네스의 체를 이용해 소수를 구분해주는 과정에서 일반적인 방법으로 하려면, 모든 숫자에 대해 소수인지 여부 (True/False) 를 나타내주는 값이 있어야 하기 때문에 메모리가 많이 소요됩니다. 예를들어 10000이 소수인지 아닌지를 판별하려면 seive[0] = FALSE seive[1] = FALSE seive[2] = TRUE 이런식으로 에라토스 테네스는 길이가 10000 짜리인 리스트가 생깁니다. 따라서 메모리를 줄일 수 있는 비트마스킹 기법을 사용하였습니다. 0 : 합성수 1 : 소수 seive[0] = 10101100 (순서대로 7,6,5,4,3,2,1,0에 해당하는 소수 여부) seive[1] = 001010.. 2020. 7. 3.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 시저 암호 🔒 해답) 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.