본문 바로가기

Coding Test/Programmers

(122)
[프로그래머스/파이썬] k진수에서 소수 개수 구하기 나의 풀이 import re def solution(n, k): num = '' answer = 0 while n > 0: q, r = divmod(n, k) num = str(r) + num n = q pool = list(map(int, re.findall('[1-9]+', num))) for num in pool: for i in range(2, int(num ** 0.5) + 1): if num % i == 0: break else: if num != 1: answer += 1 return answer - 아라토스테네스의 체에서 +1 을 안해줄때 문제가 생겼다. 아마 제곱수의 경우, 부동소수점 오차에 의한 것으로 추측된다 - 앞으론 꼭 +1을 해줄 것.
[프로그래머스/파이썬] 멀리 뛰기 나의 풀이 def solution(n): if n == 1: return 1 a, b = 1, 2 for i in range(2, n): a, b = b, (a + b) % 1234567 return b 재귀 함수를 이용한 풀이 def jumpCase(num): return (jumpCase(num-1) + jumpCase(num-2)) if num > 2 else num - 지금은 오답일 풀이(런타임)이지만 창의적이라 생각해서 소개하고자 함
[프로그래머스/파이썬] 땅따먹기 나의 풀이 def solution(land): for step in range(1, len(land)): for i in range(4): land[step][i] += max(land[step - 1][i - 1], land[step - 1][i - 2], land[step - 1][i - 3]) return max(land[-1])
[프로그래머스/파이썬] 다음 큰 숫자 나의 풀이 from itertools import count def solution(n): for i in count(n + 1, 1): if bin(i).count('1') == bin(n).count('1'): return i - 2진법으로 표현된 수를 분석하여 다음 큰 숫자를 찾는 것이 더 빨랐을 것. - 하지만 그 수의 차이가 크지 않아서 위 코드도 충분히 효율적
[프로그래머스/파이썬] [3차] n진수 게임 나의 풀이 def get_num(num, n): digit = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'] q, r = divmod(num, n) if q: return get_num(q, n) + digit[r] else: return digit[r] def solution(n, t, m, p): answer = '' count = 0 while len(answer) < (t - 1) * m + p: answer += get_num(count, n) count += 1 return answer[:((t - 1) * m + p)][p - 1::m] - digit을 list 대신 string이나 list('..
[프로그래머스/파이썬] 올바른 괄호 나의 풀이 def solution(s): stack = [] for l in s: if l =='(': stack.append(l) elif stack: stack.pop() else: return False if stack: return False else: return True
[프로그래머스/파이썬] [3차] 파이령 정렬 나의 풀이 import re from collections import defaultdict def solution(files): answer = [] data = defaultdict(list) pattern = re.compile(r'^(?P\D+)(?P\d{1,5})') for idx, file in enumerate(files): m = pattern.search(file) if m: data[m.group('head').lower()].append((int(m.group('number')), idx, file)) for head, files in sorted(data.items()): for file in sorted(files): answer.append(file[-1]) return answ..
[프로그래머스/파이썬] [3차] 압축 나의 풀이 from string import ascii_uppercase as alphabet def solution(msg): answer = [] dictionary = dict() for n, l in enumerate(alphabet): dictionary[l] = n + 1 while msg: for i in range(len(msg), 0, -1): if msg[:i] in dictionary: answer.append(dictionary[msg[:i]]) if i < len(msg): dictionary[msg[:i + 1]] = len(dictionary) + 1 msg = msg[i:] break return answer - slicing에서 index error가 발생하지 않으니 'if..
[프로그래머스/파이썬] 가장 큰 정사각형 찾기 나의 풀이 (시간 초과) import numpy as np def solution(board): board = np.array(board) height, width = board.shape for n in range(min(height, width), 0, -1): for j in range(height - n + 1): for i in range(width - n + 1): if np.all(board[j:j+n, i:i+n] == 1): return n ** 2 return 0 나의 풀이 (최종 답안) def solution(board): dp = list(board) answer = max(board[0]) for j in range(1, len(board)): for i in range(1, le..
[프로그래머스/파이썬] [3차] 방금그곡 나의 풀이 def solution(m, musicinfos): musicinfos = [(x.split(',')) for x in musicinfos] pool = [] temp, m = list(m), '' for x in temp: if x == '#': m = m[:-1] + m[-1].lower() else: m += x for start, end, name, melody in musicinfos: start, end = list(map(int, start.split(':'))), list(map(int, end.split(':'))) duration = (end[0] - start[0]) * 60 + (end[1] - start[1]) notes = [] for x in melody: if x ..

반응형