본문 바로가기

알고리즘

(138)
[프로그래머스 코딩테스트 고득점 Kit / 탐욕법(Greedy)] 체육복 (python) 풀이 def solution(n, lost, reserve): lost = set(lost) reserve = set(reserve) for i in lost & reserve: lost.remove(i) reserve.remove(i) sorted_lost = sorted(lost) for i in sorted_lost: if i-1 in reserve: lost.remove(i) reserve.remove(i-1) elif i+1 in reserve: lost.remove(i) reserve.remove(i+1) return n - len(lost) 내 풀이 lost와 reserve는 중복이 없다고 했으므로 set으로 만든다. 둘의 교집합이 생기는 경우 자기 체육복을 입으면 되므로 교집합 먼저 처리해..
[프로그래머스 코딩테스트 고득점 Kit / 힙(Heap)] 이중우선순위큐 (python) 풀이 import heapq def solution(operations): answer = [] minheap = [] maxheap = [] for ins in operations: a, b = ins.split(' ') b = int(b) if a == 'I': #heapq에 push heapq.heappush(minheap, b) heapq.heappush(maxheap, -b) elif a == 'D': #heapq에 delete try: if b < 0: min_value = -(heapq.heappop(minheap)) maxheap.remove(min_value) else: max_value = -(heapq.heappop(maxheap)) minheap.remove(max_value) #h..
[백준 / 누적 합] 11659 : 구간 합 구하기 4 (python) 문제 설명 수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다. 출력 총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다. 제한 1 ≤ N ≤ 100,000 1 ≤ M ≤ 100,000 1 ≤ i ≤ j ≤ N 예제 입력 5 3 5 4 3 2 1 1 3 2 4 5 5 예제 출력 12 9 1 풀이 import sys input = sys.stdin.readline() numNo, quizNo = map(int, input().s..
[프로그래머스 코딩테스트 고득점 Kit / 힙(Heap)] 더 맵게 (python) 풀이 import heapq def solution(scoville, K): answer = 0 heapq.heapify(scoville) try: while(scoville[0] < K): a = heapq.heappop(scoville) b = heapq.heappop(scoville) c = a + (2 * b) heapq.heappush(scoville, c) answer += 1 except: answer = -1 return answer 내 풀이 처음에 테스트 케이스 1, 3, 8, 14에서 런타임 에러가 났는데, 이는 "모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우에는 -1을 return 합니다." 제한 사항을 놓친 것이 원인이었다. 이는 try except문으로 구현하여 해결했..
[프로그래머스 코딩테스트 고득점 Kit / 정렬] H-Index (python) 테스트 케이스 citations return [7, 7, 7, 7, 7] 5 [7, 5, 5, 5, 4, 2, 1, 1, 0] 4 문제를 풀기 위해 이해해야 할 것: h의 최댓값은 citations의 길이이다. h값은 citations 배열의 요소에만 국한되지 않는다. 풀이 def solution(citations): answer = 0 citations.sort() h = len(citations) while(True): for i in range(len(citations)): if h
[프로그래머스 코딩테스트 고득점 Kit / 정렬] 가장 큰 수 (python) 풀이 def solution(numbers): answer = '' strNumbers = sorted(map(str, numbers), key=lambda x : x*3, reverse=True) answer = ''.join(strNumbers) if int(answer) == 0: answer = "0" return answer numbers 배열을 map을 사용하여 전부 str로 바꿔준다. 그리고 정렬을 하는데, 큰 수로 만들기 위해서는 내림차순 정렬을 해야한다. 따라서 reverse=True 조건을 사용한다. 내림차순 정렬만 적용하면 [3, 30, 33] 배열의 경우 [33, 30, 3] 이 나오는데 가장 큰 수가 되려면 [33, 3, 30]이 돼야한다. 따라서 람다식을 써서 조건을 더 추가해주..
[프로그래머스 코딩테스트 고득점 Kit / 정렬] K번째수 (python) 풀이 def solution(array, commands): answer = [] for command in commands: i, j, k = command answer.append(sorted(array[i-1:j])[k-1]) return answer commands 2차원 배열을 반복문을 돌면서 한 배열씩 꺼내서 i, j, k 변수에 저장하고, array를 i부터 j번째 수까지 slice한 다음 sorted로 오름차순 정렬해준 뒤, k번째 수를 answer에 저장한다.
[프로그래머스 코딩테스트 고득점 Kit / 완전탐색] 모음사전 (python) 풀이 def solution(word): vowel = "AEIOU" global answer global flag answer = 0 flag = True def perm(arr, n): global answer global flag if n > 0: curWord = "".join(arr) if word == curWord: flag = False return if n == 5: return for i in range(len(vowel)): if flag: answer += 1 arr.append(vowel[i]) perm(arr, n+1) arr.pop() else: return perm([], 0) return answer 내 풀이 재귀함수로 문제해결 flag 변수를 만들어서 답이 나오면 들어와있..

반응형