-
""" 출처:프로그래머스, 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 """
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/12941 """ # 풀이 과정 def solution(A, B): answer = 0 A.sort() B.sort(reverse=True) result = 0 print(A, B) for k in range(len(A)): result += A[k] * B[k] return result
-
""" 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/214289 """ # 풀이 과정 def solution(temperature, t1, t2, a, b, onboard): t = temperature p = onboard max_t, min_t = t2, t1 dp = [[1e9] * 51 for _ in range(1001)] dp[0][t + 10] = 0 count = sum(p) for i in range(1, len(onboard)): # i 시간 if p[i] == 1: start = t1 end = t2 + 1 else: start = -10 end = 40 + 1 for j in range(start, end): if j == t: check = [dp[i - 1][j + 10]] if j + 10 != 0: check.append(dp[i - 1][j - 1 + 10]) if j + 10 != 50: check.append(dp[i - 1][j + 1 + 10]) dp[i][j + 10] = min(check) elif j > t: check = [dp[i - 1][j + 10] + b] if j + 10 != 0: check.append(dp[i - 1][j + 10 - 1] + a) if j + 10 != 50: check.append(dp[i - 1][j + 10 + 1]) dp[i][j + 10] = min(check) else: check = [dp[i - 1][j + 10] + b] if j + 10 != 0: check.append(dp[i - 1][j + 10 - 1]) if j + 10 != 50: check.append(dp[i - 1][j + 10 + 1] + a) dp[i][j + 10] = min(check) if p[i] == 1: count -= 1 if count == 0: last = i return min(dp[last]) # return min(dp[len(p)-1])
-
""" 출처:프로그래머스, 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