본문 바로가기

분류 전체보기

(109)
[Python | 파이썬] N으로 표현 (프로그래머스 DYNAMIC PROGRAMMING) [Python | 파이썬] N으로 표현 (프로그래머스 DYNAMIC PROGRAMMING) N의 사용횟수의 최소값을 return하는 함수를 작성하는 것이고, 최솟값이 8보다 크면 -1을 return 하도록 한다. N = 5일때 사용 횟수를 X로 하고 X번 사용했을 때 나타낼 수 있는 수 [X = 1] 5 ( i = 1) [X = 2] 55 5 + 5, 5 - 5, 5 * 5, 5 / 5 (i = 2, j = 0) [X = 3] 555 55 + 5, 55 - 5, 55 * 5, 55 / 5 5 + (5 + 5), 5 - (5 + 5), 5 * (5 + 5), 5 / (5 + 5) 5 + (5 - 5), 5 - (5 - 5), 5 * (5 - 5) * 5, 5 / (5 - 5) 5 + (5 * 5), 5 -..
[Python | 파이썬] H-Index (프로그래머스 정렬) [Python | 파이썬] H-Index (프로그래머스 정렬) h번 이상 인용된 논문의 갯수가 h개 이상일 때 h의 최대값을 구하는 문제이다. 따라서 h는 최대 n을 넘을 수 없다. 각 인용횟수 이상으로 인용된 논문들의 개수를 담고있는 배열 arr을 이용해 인용횟수가 i인 논문이 나타나면 arr[1] 부터 arr[i]까지 1씩 증가시킨다. 각 논문의 인용횟수를 차례대로 접근하면서 논문의 인용횟수가 n보다 크다면 h를 n으로 만든다. 그리고 각 논문이 최대로 인용될 수 있는 횟수부터 1번 이상 인용되는 경우의 횟수까지 1씩 더한다. 더하면서 인용횟수를 1씩 감소한다. 그리고 각 인용횟수 이상으로 인용된 논문들의 개수를 담고있는 배열 arr에서 조건을 만족하는 최대값을 찾아 return한다. 더보기 def ..
[Python | 파이썬] 가장 큰 수 (프로그래머스 정렬) [Python | 파이썬] 가장 큰 수 (프로그래머스 정렬) 가장 큰 수를 만들기 위해서는 주어진 numbers 배열을 각 숫자의 길이가 한글자라면 이뒤에도 이것과 같은 글자가 이어졌다고 생각하고 내림차순으로 정렬하고 앞에서부터 쭉 연결하면 된다. 즉 9와 90이 주어진다면 909 보다는 990이 크다. 따라서 9가 90보다 먼저오도록 정렬하려면 9를 99로 생각하고 정렬해야한다. 문제에서 주어진 numbers의 각 원소는 0 이상 1000 이하이므로 최대 한자리수가 세자리수와 비교될 수 있도록 모든 글자의 길이를 3배로 한다. 더보기 def solution(numbers): answer = '' numbers = list(map(str, numbers)) numbers.sort(key = lambda ..
[Python | 파이썬] K번째수 (프로그래머스 정렬) [Python | 파이썬] K번째수 (프로그래머스 정렬) 더보기 def solution(array, commands): answer = [] for i in commands: temp = array[i[0]-1:i[1]] temp.sort() answer.append(temp[i[2]-1]) return answer https://programmers.co.kr/learn/courses/30/lessons/42748?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr
[Python | 파이썬] 이중우선순위큐 (프로그래머스 HEAP) [Python | 파이썬] 이중우선순위큐 (프로그래머스 HEAP) 이문제는 대놓고 우선순위큐를 이중으로 쓰라고 말해주고 있다. 따라서 최소힙과 최대힙을 두개 구현하여 푸는 단순한 방법이 있고, heapq 라이브러리의 다른 함수를 써서 푸는 방법이 있다. 주의할 점은 최소힙과 최대힙 중 한곳에서 팝해준 뒤에 다른 힙에서는 remove 연산을 해줘야한다는 것이다. 또한 최대힙을 구현하기위해서는 데이터를 -를 붙여서 heappush해주고, 빼준뒤에는 다시 -를 붙여줘야 원래 데이터의 값이 나온다. => -를 붙인 데이터를 최소힙에서 찾아서 remove해주면 된다. 새로 알게된 heapq의 함수 - heapq.nlargest(n, heap) heap에서 큰 순서대로 n개의 수를 뽑아준다. - heapq.nsma..
[Python | 파이썬] 디스크 컨트롤러 (프로그래머스 HEAP) [Python | 파이썬] 디스크 컨트롤러 (프로그래머스 HEAP) 0. 효율성 문제라면 해시, 이분탐색, 힙을 떠올리자! 이 문제는 최소힙을 사용해서 풀 수 있다. 1. heap에 push해줄때는 작업이 먼저 들어온 순서대로, 작업의 소요시간만 넣어주면 된다. 2. heap에서 pop해줄때는 작업이 빨리 끝나는 순서대로 => 이렇게 매 작업마다 반복해준다. 즉 while문은 최대 n번 반복된다. 이때 jobs에서 이미 처리된 작업을 매번 갱신해주기 귀찮기때문에 before라는 변수를 써서 이전시간을 기록해주고, 이전시간 초과이고 현재시간 이하인 작업들만 체크해주면된다. 또한 heap에서 가장 짧은 작업시간을 가진 작업이 나가기때문에 heap에 남은 다른 작업들은 이때 그만큼의 시간을 반드시 heap안에..
[Python | 파이썬] 더 맵게 (프로그래머스 HEAP) [Python | 파이썬] 더 맵게 (프로그래머스 HEAP) 최소힙을 이용할 수 있는 heapq를 이용해서 스코빌지수가 작은 원소부터 맨 앞에 오도록 heap에 push해준다. 가장 안 매운 두 음식을 섞어준 뒤에 다시 heap에 추가해준다. 섞은 횟수를 증가시키고, 만약 모든 음식의 스코빌지수가 k이상인지 확인하는 함수의 return 값이 True라면 반복문을 종료하고 answer를 return한다. 만약 heap에 원소가 한 개 남았다면 모든 음식을 섞어도 스코빌지수를 k이상으로 만들지 못한 것이므로 -1을 return한다. 더보기 import heapq def check(h, k): for i in h: if i < k: return False return True def solution(scovi..
[Python | 파이썬] 주식가격 (프로그래머스 STACK/QUEUE) [Python | 파이썬] 주식가격 (프로그래머스 STACK/QUEUE) 각 가격이 최대로 가격이 떨어지지 않을 수 있는 기간으로 answer 리스트를 초기화한다. answer = [len(prices)-1-i for i in range(len(prices))] prices[0]은 len(prices)-1만큼 최대로 안 떨어질 수 있고, prices[n-1]은 맨 마지막 가격이므로 0이다. 현재까지의 시간(초)에 대해서 가장 높은 가격의 index를 저장하는 stack을 생성한다. 맨처음에 index가 0일때 현재 가장 높은 가격은 prices[0]이다. 1부터 len(prices)-1까지 i를 증가시키며 prices[index]가 현재 가격 prices[i]보다 크다면 prices[index]는 적어도..