본문 바로가기

Programming/Programmers

(40)
[프로그래머스/Python] 가운데 글자(구현) 코딩테스트 연습 - 가운데 글자 가져오기 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 재한사항 s는 길이가 1 이상, 100이하인 스트링입니다. 입출력 예 s ret programmers.co.kr def solution(s): answer = '' mok, namo = divmod(len(s),2) if namo == 0: # 짝수 answer = s[mok-1:mok+1] else: # 홀수 answer = s[mok] return answer
[프로그래머스/Python] 3진법 뒤집기(진법변환) 코딩테스트 연습 - 3진법 뒤집기 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수 programmers.co.kr 진법변환 연습하는 문제 def ten2three(n): s = "" while n > 0: mok , namo = divmod(n, 3) s += str(namo) # 뒤집어서 저장 n = mok return s def three2ten(n): out = 0 for i, num in enumerate(n): out += int(num) * pow(3, len(n)-i-1) return out def solution(..
[프로그래머스/Python] 두 개 뽑아서 더하기(조합) 코딩테스트 연습 - 두 개 뽑아서 더하기 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한 programmers.co.kr 오름차순으로 출력한다는 점만 주의하자. import itertools def solution(numbers): answer = set() combi = list(itertools.combinations(numbers, 2)) for a, b in combi: answer.add(a+b) return sorted(list(answer))​
[프로그래머스/Python] 여행경로(DFS) 코딩테스트 연습 - 여행경로 [[ICN, SFO], [ICN, ATL], [SFO, ATL], [ATL, ICN], [ATL,SFO]] [ICN, ATL, ICN, SFO, ATL, SFO] programmers.co.kr 간선정보를 하나씩 지워가면서 answer에 경로를 담는다. 어려워...ㅜㅜ 다음에 다시 풀어야지 import collections def solution(tickets): tickets.sort(reverse=True) routes = collections.defaultdict(list) for t1,t2 in tickets: routes[t1].append(t2) answer = [] stack = ["ICN"] while stack: top = stack[-1] if top not..
[프로그래머스/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]