-
""" 출처:프로그래머스. 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
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/161988 """ # 풀이 과정 # 이분탐색 접근 생각(오름차순이 아니라 활용x) # 두 개의 펄스를 만든 후 차례대로 각각 더해가다 만약 -를 간다면 0으로 초기화 후 매 순간 최댓값이 바뀌는지 체크하는 구조로 확인 def solution(sequence): t1 = [1, -1] # 1,-1,1... t2 = [-1, 1] # -1,1,-1... s = sequence i, j = divmod(len(s), 2) t1 += [1, -1] * (i - 1) t2 += [-1, 1] * (i - 1) t1 += [1] * j t2 += [-1] * j a = [] b = [] if len(s) == 1: t1 = [1] t2 = [-1] a_c = 0 b_c = 0 result = 0 for k in range(len(s)): a_c += t1[k] * s[k] b_c += t2[k] * s[k] if a_c < 0: a_c = 0 if b_c < 0: b_c = 0 if result < a_c: result = a_c elif result < b_c: result = b_c return result
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/42842 """ # 풀이 과정 def solution(brown, yellow): result = [] b = brown y = yellow k = b + y t = k while t >= k ** 0.5: a = k / t if a == int(a) and a > 2: if k - (2 * t + (a - 2) * 2) == y: return [int(t), int(a)] else: t -= 1 else: t -= 1 return 0
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/132203 """ """ SELECT DR_NAME,DR_ID,MCDP_CD,DATE_FORMAT(HIRE_YMD,"%Y-%m-%d") "HIRE_YMD" from DOCTOR where MCDP_CD in ("CS","GS") order by HIRE_YMD desc, DR_NAME asc """
-
""" 출처:프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/43164 """ # 풀이 과정 from collections import deque def solution(tickets): t = list(map(tuple, tickets)) trip = len(tickets) q = deque([]) for start, arrive in t: if start == "ICN": q.append([(start, arrive)]) result = [] while q: check = q.popleft() if len(check) == trip: result.append(check) continue for start, arrive in t: if check[-1][1] == start and check.count((start, arrive)) != t.count((start, arrive)): q.append(check + [(start, arrive)]) result = deque(result) answer = [] new = [] while result: r = result.popleft() new = [] for i in range(trip): new.append(r[i][0]) new.append(r[-1][1]) answer += [new] new = [] answer.sort() return answer[0]
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/133024 """ """ SELECT FLAVOR from FIRST_HALF order by TOTAL_ORDER desc,SHIPMENT_ID asc """