-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/131697 """ """ 풀이 과정 SELECT max(PRICE) "MAX_PRICE" from PRODUCT """
-
""" 출처:프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/43238 """ # 풀이 과정 def solution(n, times): times.sort() left = 0 right = n * max(times) result = [] while left <= right: count = 0 mid = (left + right) // 2 for t in times: count += (mid // t) if count > n: break if count >= n: right = mid - 1 result.append(mid) else: left = mid + 1 return min(result)
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/43165 """ # 풀이 과정 def cal(check, a): new = [] if len(check) == 0: new.append(a) new.append(-a) else: for k in check: t_1 = k + a t_2 = k - a new.append(t_1) new.append(t_2) return new def solution(numbers, target): answer = 0 check = [] for a in numbers: check = cal(check, a) for b in check: if b == target: answer += 1 return answer
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/152995 """ # 풀이 과정 def solution(scores): n = scores[0] num = n[0] + n[1] s = sorted(scores, key=lambda x: (-x[0], x[1])) check = [] for i in range(len(s)): if s[i][0] + s[i][1] > num: if s[i][0] > n[0] and s[i][1] > n[1]: return -1 elif len(check) == 0: # 첫번째의 경우 인센티브 못받을 경우x check.append([s[i][0], s[i][1]]) v = s[i][1] w = s[i][0] else: if s[i][0] != w: # 더 작아지는 순간 if v > s[i][1]: # 이전 첫번째 성과가 무조건 높기에 두번째는 그 이전보다 높아야 인센티브 가능! continue else: check.append([s[i][0], s[i][1]]) v = s[i][1] w = s[i][0] else: check.append([s[i][0], s[i][1]]) v = s[i][1] # 첫번쨰가 같다면 두번쩨는 뒤로 갈수록 점수가 최소 높거나 같기때문에 갱신 return len(check) + 1
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/42883 """ # 풀이 과정 def solution(number, k): # 앞에서부터 제일 작은 수 k개 from collections import deque t = deque(list(number)) result = [] while k: n = t.popleft() if len(result) == 0: result.append(n) elif len(t) == 0: if int(result[-1]) < int(n): while True: result.pop() k -= 1 if len(result) == 0 or k == 0: result.append(n) break elif int(result[-1]) >= int(n): result.append(n) break else: if int(result[-1]) >= int(n): result.append(n) if k > 0: return "".join(result[:len(result) - k]) else: if int(result[-1]) < int(n): while True: result.pop() k -= 1 if len(result) == 0 or k == 0: result.append(n) break elif int(result[-1]) >= int(n): result.append(n) break else: if int(result[-1]) >= int(n): result.append(n) final = "".join(list(result) + list(t)) return final
-
""" 출처:프로그래머스. https://school.programmers.co.kr/learn/courses/30/lessons/132201 """ """ SELECT PT_NAME,PT_NO,GEND_CD,AGE, CASE when TLNO is not null then TLNO else "NONE" END "TLNO" from PATIENT where GEND_CD="W" and AGE <=12 order by AGE desc, PT_NAME asc """
-
""" 출처: 프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/42628 """ # 풀이 과정 import heapq from collections import defaultdict def solution(operations): max_q = [] min_q = [] number = defaultdict(int) for command in operations: if command == "D -1": while True: if len(min_q) == 0: break if number[min_q[0]] == 0: heapq.heappop(min_q) else: break if len(min_q) == 0: continue num = heapq.heappop(min_q) number[num] -= 1 elif command == "D 1": while True: if len(max_q) == 0: break if number[max_q[0] * (-1)] == 0: heapq.heappop(max_q) else: break if len(max_q) == 0: continue num = heapq.heappop(max_q) number[num * (-1)] -= 1 else: n = command.split(" ") c = int(n[1]) heapq.heappush(max_q, c * (-1)) heapq.heappush(min_q, c) number[c] += 1 # print(max_q,min_q) # print(number) max_number = float("-inf") min_number = float("inf") for i in min_q: if number[i] > 0: max_number = max(max_number, i) min_number = min(min_number, i) if max_number == float("-inf"): return [0, 0] return [max_number, min_number]
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/68936 """ # 풀이 과정 def solution(arr): from collections import deque k = len(arr) result = [] q = deque([arr[0][0], arr[0][1]]) count_0 = 0 count_1 = 0 visit = [] flag = False while flag == False and k >= 2: new = [[0 for v in range(int(k / 2))] for w in range(int(k / 2))] count = 0 c = 0 d = 0 for a in range(0, k, 2): if a != 0: c += 1 d = 0 for b in range(0, k, 2): if arr[a][b] == arr[a + 1][b] == arr[a + 1][b + 1] == arr[a][b + 1] == 1: count += 1 new[c][d] = 1 elif arr[a][b] == arr[a + 1][b] == arr[a + 1][b + 1] == arr[a][b + 1] == 0: count += 1 new[c][d] = 0 else: new[c][d] = "x" check = 0 if arr[a][b] == 1: count_1 += 1 elif arr[a][b] == 0: count_0 += 1 if arr[a][b + 1] == 1: count_1 += 1 elif arr[a][b + 1] == 0: count_0 += 1 if arr[a + 1][b + 1] == 1: count_1 += 1 elif arr[a + 1][b + 1] == 0: count_0 += 1 if arr[a + 1][b] == 1: count_1 += 1 elif arr[a + 1][b] == 0: count_0 += 1 d += 1 # print(new,count_0,count_1) if count == 0: flag = True else: if k >= 2: k = int(k / 2) arr = new else: arr = new break # 마지막 배열 체크 for v in range(len(new)): for w in range(len(new)): if new[v][w] == 0: count_0 += 1 elif new[v][w] == 1: count_1 += 1 return [count_0, count_1]
-
""" 출처:프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/60062 """ # 풀이 과정 """ 1시간 보내야 할 친구 수 n:외벽 길이 weak:취약 지점 dist:친구들이 이동 할 수 있는 길이 시간 초과 발생 > 중복을 제거할 알고리즘 및 아이디어 구현 생각해보기 """ from itertools import permutations def solution(n, weak, dist): # waek 개수 weak_point = len(weak) # 최대 사람 수 +1 > 최대 사람으로도 부족할 시 > -1 person = len(dist) + 1 # 원형을 펴서 직선으로 만들기 > 시계 방향, 반시계 방향으로 두 가지를 동시에 하기 위해서 line = weak for i in range(weak_point): line.append(weak[i] + n) # 사람 배치 순서 person_rotation = list(permutations(dist, len(dist))) for start in range(weak_point): for p in person_rotation: # 사람 수(취약점이 없을 수도 있다) cnt = 0 # 0명일때는 취약점 조사 불가 > -1로 표현함으로써 취약점 조사 불가 표현 location = -1 # weak 포인트 개수가 동일하게 하기 위해 start+weak_point for i in range(start, start + weak_point): if location < line[i]: cnt += 1 # 사람 수 len(dist) if cnt > len(dist): break # 거리 낭비를 최소화 > 취약점에서 시작 location = line[i] + p[cnt - 1] person = min(person, cnt) if person > len(dist): return -1 return person
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/17680 """ # 풀이 과정 def solution(cacheSize, cities): from collections import deque result = 0 check = deque([]) # cache_list if cacheSize == 0: return len(cities) * 5 for a in cities: a = a.upper() if len(check) < cacheSize: if a in check: i = check.index(a) del check[i] check.append(a) result += 1 else: check.append(a) result += 5 else: if a in check: i = check.index(a) del check[i] check.append(a) result += 1 else: check.popleft() check.append(a) result += 5 return result