-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/12939 """ # 풀이 과정 def solution(s): k=s.split(" ") k=list(map(int,k)) answer=str(min(k))+" "+str(max(k)) return answer
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/133025 """ """ 풀이 과정 SELECT FIRST_HALF.FLAVOR "FLAVOR" from FIRST_HALF inner join ICECREAM_INFO on FIRST_HALF.FLAVOR=ICECREAM_INFO.FLAVOR where FIRST_HALF.TOTAL_ORDER >3000 and ICECREAM_INFO.INGREDIENT_TYPE="fruit_based" order by FIRST_HALF.TOTAL_ORDER desc """
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/138475 """ # 풀이 과정 # point:약수의 개수를 효율적으로 구하는 방식에 대하여 고민해서 풀기 # 약수의 개수로 구할 수 있다 # 리스트로 만들기에는 1억의 숫자를 두 번 구성하는 리스트 만들 경우 데이터 초과 # 각 수가 나오는 출현 횟수는 표를 보면 약수의 개수와 비례한다는 사실 유추 가능!! # dp로 한 번에 나오는게 가능한가 생각 접근해보기! > 출제의도!(디클레어 증명등등 사용x) # 약수의 개수를 구하는 과정을 간소화 시킬 전략 생각해보고 접근하기! def solution(e, starts): dp = [0] * (e + 1) for i in range(1, e + 1): for j in range(1, min((e // i + 1), i)): dp[i * j] += 1 check = [0] * (e + 1) num = 0 # 약수의 번호 count = 0 # 약수의 개수 for k in range(e, -1, -1): if dp[k] >= count: count = dp[k] num = k check[k] = num else: check[k] = num result = [] for t in starts: result.append(check[t]) return result
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/12973 """ # 풀이 과정 def solution(s): from collections import deque k = deque(list(s)) c = 0 check = [] while k: a = k.popleft() if check: if check[-1] == a: check.pop() while check: if len(check) >= 2: if check[-1] == check[-2]: check.pop() check.pop() else: break else: break else: check.append(a) else: check.append(a) return 1 if len(check) == 0 else 0
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/144853 """ """ SELECT BOOK_ID,date_format(PUBLISHED_DATE,'%Y-%m-%d') "PUBLISHED_DATE" from book where PUBLISHED_DATE like "2021%" and CATEGORY like "인문" order by PUBLISHED_DATE asc """
-
""" 출처:프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/92343 """ # 풀이 과정 """ 양 모으기 # 조건 각 노드 방문시 양과 늑대가 따라옴 늑대가 양보다 같거나 많을 경우 양이 다 잡아먹힘 최대한 많은 양을 모아서 루트 노드로 돌아오기 그래프 형태로 볼 때 dfs 생각 방향 # info: i번 노드의 양 또는 늑대 여부 # edges: 연결된 두 노드를 나타냄 #생각방향 자식 노드를 거치려면 부모노드의 동물을 거쳐야한다 단순 생각 방향: 완탐 후 최대 양을 표현하면 된다 info를 숫자로 표현 후 순열로 한 후 모든 경우의 수를 표현가능 양을 최대로 모은 후 늑대가 있는 곳으로 가야한다 모든 노드들의 양이 최대 늑대 최소 값들을 구해야한다 dfs로 풀었던 등대 문제 생각 # dfs 사용 시 원복 개념 등산로 찾기에서 쓰인 개념 일부분 아이디어 사용!! """ v = [] result = [] def dfs(sheep, wolf, info, edges): global v, result if sheep > wolf: result.append(sheep) else: return for i, j in edges: # 부모노드 방문 여부 확인 if v[i] == 1 and v[j] == 0: v[j] = 1 # 늑대인 경우 if info[j] == 1: dfs(sheep, wolf + 1, info, edges) else: dfs(sheep + 1, wolf, info, edges) # 다른 부분 또한 방문 확인 위해 원복 v[j] = 0 def solution(info, edges): global v v = [0 for _ in range(len(info))] # 첫번째 방문 v[0] = 1 # sheep, wolf dfs(1, 0, info, edges) return max(result)
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/92341 """ # 풀이 과정 def solution(fees, records): # records:시각 차량 번호 내역 # fees:주차 요금 result = [] # 차량 번호가 작은거부터 요금 정산 max_time = 23 * 60 + 59 # 최대 시간 from collections import deque car_in = [] # 입차 car_out = [] # 출차 for a in records: k = a.split(" ") b = k[0].split(":") c = int(b[0]) * 60 + int(b[1]) if k[2] == "IN": car_in.append([int(k[1]), int(c)]) elif k[2] == "OUT": car_out.append([int(k[1]), int(c)]) car_in.sort(key=lambda x: (x[0], x[1])) car_out.sort(key=lambda x: (x[0], x[1])) car_in = deque(car_in) car_num = set([car_in[k][0] for k in range(len(car_in))]) car_num_check = {} # 차량 번호별 누적 시간 check for t in car_num: car_num_check[t] = 0 # 차량별 주차 시간 누적 계산 while car_in: v, w = car_in.popleft() if len(car_out) > 0: if car_out[0][0] == v: car_num_check[v] += car_out[0][1] - w del car_out[0] else: car_num_check[v] += max_time - w else: car_num_check[v] += max_time - w # print(car_num_check) car_num_check = sorted(car_num_check.items(), key=lambda item: item[0]) # print(car_num_check) for a, b in car_num_check: if b <= fees[0]: result.append(fees[1]) else: if (b - fees[0]) % fees[2] == 0: result.append(fees[1] + int((b - fees[0]) / fees[2]) * fees[3]) else: result.append(fees[1] + (int((b - fees[0]) / fees[2]) + 1) * fees[3]) return result
-
""" 출처:프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/12927 """ # 풀이 과정 import heapq def solution(n, works): # map(lambda x:x*x,works) new = [] for i in works: heapq.heappush(new, -i) while n > 0: k = heapq.heappop(new) k += 1 heapq.heappush(new, k) n -= 1 if new[0] >= 0: # print(new) return 0 return sum(list(map(lambda x: x * x, new)))
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/42584 """ # 풀이 과정 def solution(prices): p = prices result = [] for a in range(len(prices) - 1): num = p[a] count = 0 flag = False for b in range(a + 1, len(p)): count += 1 if p[b] < num: result.append(count) flag = True break if flag == False: result.append(count) result.append(0) return result
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/151136 """ """ 풀이 과정 # 반올림 함수 round SELECT round(avg(DAILY_FEE)) from CAR_RENTAL_COMPANY_CAR where CAR_TYPE ="SUV" """