본문 바로가기

Programmers11

1. 더 맵게 lv.2 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해, Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return. [제한 사항] scoville의 길이는 2 이상 1,000,000 이하입니다. K는 0 이상 1,000,000,000 이하입니다. sco.. 2023. 12. 22.
정렬 1. K번째 수 lv.1 배열 array의 i번째부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수 구하기 [매개변수] 배열 array [i, j, k]를 원소로 가진 2차원 배열 commands [제한사항] array의 길이는 1 이상 100 이하입니다. array의 각 원소는 1 이상 100 이하입니다. commands의 길이는 1 이상 50 이하입니다. commands의 각 원소는 길이가 3입니다. def solution(array, commands): answer = [] for i,j,k in commands: answer.append(sorted(array[i-1:j])[k-1]) return answer 한 줄로 표현한 코드는 아래와 같다. def solution(array, com.. 2023. 12. 21.
덧칠하기 def solution(n, m, section): # section: 다시 칠해야 하는 영역 # m: 칠해지는 연속 구간 (롤러 길이) -> 한 번의 페인트칠 # ex) 6-3+1 = 4 (연속 구간) => 2 (시작 구역) + 4(연속 구간) -1 = 끝나는 구역 # 어차피 n // m 번 해야함 # section 길이가 m보다 길면 필수 # section의 최대 최소 구역 비교하여 m을 커버할 수 있는지..? # max(section) > min(section) + m - 1 answer = 0 if m==1: answer = len(section) else: while section: limit = min(section) + m - 1 idx = max([idx for idx, s in enume.. 2023. 12. 20.
해시 1. 완주하지 못한 선수 lv.1 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion에서 완주하지 못한 선수 return하는 문제 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. def solution(participant, completion): # len(completion) = len(participant)-1 # person=participant.. 2023. 12. 18.
카드 뭉치 cards1과 cards2에서 순서대로 뽑을 수 있어야 함 def solution(cards1, cards2, goal): answer = '' for word in goal: if word==cards1[0]: if len(cards1) > 1: cards1 = cards1[1:] answer = "Yes" elif word==cards2[0]: if len(cards2) > 1: cards2 = cards2[1:] answer = "Yes" else: return "No" return answer 2023. 12. 15.
2016 1월 1일은 금요일 리스트 인덱스가 0부터니까 금요일부터 시작 (당일) def solution(a, b): month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] week = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU'] if a==1: answer = week[b%7-1] else: # 5월이면 4월까지 더하고 남은 일수 진행 day = sum(month[:a-1]) + b answer = week[day%7-1] return answer 2023. 12. 15.
콜라 def solution(a, b, n): answer = 0 while n >= a: q,r = divmod(n,a) n = q*b+r print(n, end=' ') answer += q*b print(answer) return answer 2023. 12. 15.
명예의 전당 우선순위 큐 활용 import heapq def solution(k, score): answer = [] klist = [] for s in score: if len(klist) >= k: heapq.heappushpop(klist, s) else: heapq.heappush(klist, s) minnum = klist[0] answer.append(minnum) return answer 2023. 12. 15.
'문자열 내 마음대로 정렬하기' 처음에 주석으로 풀었는데, n번째 인덱스 이전의 문자들이 정렬에 고려되지 않는 문제가 생겼다 [반례] ["aea", "ba", "ce", "aee"], 1 -> ["ba", "aea", "aee", "ce"] 그렇기 때문에 문자 전체를 뒤에 잇는 것으로 해결하였다. def solution(strings, n): # answer = sorted(strings, key=lambda x: x[n:]) answer = sorted(strings, key=lambda x: x[n]+x) return answer 2023. 12. 13.
완전탐색 나는 heapq을 이용하여 풀어봤다 우선순위 큐로 자동 정렬의 효과를 기대했는데, 결국 두 개의 힙을 큐를 사용하므로 이중 for문과 비슷한 성능을 보였다. import heapq def solution(sizes): # 큰쪽을 너비, 작은쪽을 높이 # 내림차순, 역순으로 저장 answer = 0 weight_arr = [] height_arr = [] for size in sizes: heapq.heappush(weight_arr, -max(size)) heapq.heappush(height_arr, -min(size)) w = -heapq.heappop(weight_arr) h = -heapq.heappop(height_arr) answer = w*h return answer 간단하게, a와 b 중 .. 2023. 12. 13.