본문 바로가기

전체

(156)
[프로그래머스/Python] 나머지 한 점(해시/비트연산자) 알고리즘 문제 해설 - 나머지 한 점 프로그래머스의 모의테스트는 프로그래머스의 시스템에 익숙해지기 위한 테스트이며, 문제 자체는 2018 1ST KAKAO BLIND RECRUITMENT와 전혀 관계없습니다. 다만 모의테스트의 풀이에 대한 요청이 있어 programmers.co.kr 프로그래머스의 데모테스트 문제 풀이 1. 해시 x좌표가 각각 2번씩 등장하여야 사각형을 이룰 수 있으므로 1번 등장하는 좌표를 찾아서 return하면 된다. 이건 y좌표도 마찬가지. import collections def solution(v): answer = [] count_x = collections.defaultdict(int) count_y = collections.defaultdict(int) for i in v:..
[프로그래머스/Python] 더 맵게(힙) 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같 programmers.co.kr 이 문제는 음식을 섞을 때마다 다시 정렬을 계속 해야하는 문제를 극복하기 위해 우선순위큐를 이용한 풀이를 할 수 있다. python에서 우선순위 큐는 queue 모듈의 PriorityQueue를 통해 사용할 수 있지만 결국 이 클래스의 내부 구조는 heapq를 사용하도록 구현되어 있으므로 heapq를 이용하여 풀이하면 된다. import heapq def solution(scoville, K): answer = 0 heapq.heapify(scovi..
[프로그래머스/Python] 큰 수 만들기(그리디) 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구해야한다. 1) 부르트 포스 당장 생각해볼 수 있는 방법은 k개의 수를 임의로 제거한 모든 경우의 수를 계산하고 그 중 가장 큰 수를 출력하는 것이다. 문제를 곧이곧대로 해석. 하지만 아래와 같이 풀면 시간초과가 난다. 그도 그럴 것이 number가 1,000,000자리까지 가질 수 있다. from itertools import combinations def solution(number, k): answer = '' number = list(map(''.join, combinations(number, len(number)-k))) return max(number) 2) 그리디 알고리..
[프로그래머스/Python] 피보나치 수(DP) bottom-up 방식으로 푸니까 풀린다. top-down(재귀+dp배열)으로 하면 왜인지 런타임에러가 난다.. 그리고 문제도 뭔가 헷갈리게 내놨음 import collections dp = collections.defaultdict(int) def fibo(n): global dp dp[0]=0 dp[1]=1 for i in range(2,n+1): dp[i]=(dp[i-1]+dp[i-2]) % 1234567 def solution(n): fibo(n) return dp[n]
[프로그래머스/Python] 타겟넘버(DFS) 전형적인 DFS 문제다. 그나저나 전역변수 쓰는법 몰라서 오래 걸렸다. answer = 0 def dfs(numbers, target, cnt, num): global answer if cnt == len(numbers): if num == target: answer+=1 return dfs(numbers,target,cnt+1,num+numbers[cnt]) dfs(numbers,target,cnt+1,num-numbers[cnt]) return def solution(numbers, target): global answer dfs(numbers, target, 0, 0) return answer
[프로그래머스/Python] K번째수(정렬) def solution(array, commands): answer = [] for i in commands: tmp = array[i[0]-1:i[1]] tmp.sort() answer.append(tmp[i[2]-1]) return answer
[프로그래머스/Python] 모의고사(단순구현) def correct_counter(supoza, answers): cnt=0 for i in range(len(answers)): if answers[i] == supoza[i%len(supoza)]: cnt+=1 return cnt def solution(answers): supoza1 = [1, 2, 3, 4, 5] supoza2 = [2, 1, 2, 3, 2, 4, 2, 5] supoza3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] cnt=[] cnt.append(correct_counter(supoza1,answers)) cnt.append(correct_counter(supoza2,answers)) cnt.append(correct_counter(supoza3,answers))..
[프로그래머스/Python] 카펫(소인수분해) brown yellow 24 24 1. yellow가 만들어 낼 수 있는 모든 경우의 수를 탐색해야한다. -> 소인수분해로 만들 수 있는 사각형 찾아낸다. (1, 24) (2, 12) (3, 8) (4, 6) 2. 각 사각형에 대해서 테두리갯수를 구하고 brown이랑 같으면 그때의 사각형을 sort해서 return import math def get_divisor(num): divisors = [] length = int(math.sqrt(num))+1 for i in range(1,length): if num%i == 0: a =(i, num//i) divisors.append(a) return divisors def solution(brown, yellow): answer = [] tmp = get_..