😉 아이디어1. 시간초과를 방지하기 위해, _!left ~ right!_사이의 _!i!_값에 대응하는 배열 인덱스 산출2. 해당 인덱스에 일치하는 배열의 값 저장😉 풀이def calcVal(x, y): # 주어진 인덱스 중 최대값 + 1 = 배열의 값 return max(x, y) + 1def solution(n, left, right): answer = [] for i in range(left, right + 1): # i 값 대응 배열 인덱스 산출 y = i // n; x = (i % n) answer.append(calcVal(x, y)) return answer✔️ 링크 : https://school.programmers.co.k..
😉 풀이def solution(genres, plays): answer = [] # 플레이 총합 기록 dt = {} # 각 장르별 고유번호-플레이 횟수 기록 idxs = {} leng = len(genres) for i in range(leng): genre = genres[i] play = plays[i] val = dt.get(genre, 0) # 플레이 횟수 합산 dt[genre] = val + play valval = idxs.get(genre, []) # 플레이 기록 저장 valval.append({ ..
😉 풀이zero_count = 0call_count = 0def solution(s): if s == '1': # 문자열 1 예외처리 return [0, 0] q = [] q.append(s) while q: val = check(q.pop()) # 실행결과 확인 if val != '1': q.append(val) return [call_count, zero_count]# 요구사항 로직 실행def check(s): global zero_count global call_count call_count += 1 zero_count += s.count('0') new_str..
😉 아이디어1. _!오른쪽!_과 _!아래!_로 움직임 가능 -> 동적프로그래밍 적용😉 오답fields = []answer = 0min_cost = 0def solution(m, n, puddles): global fields global answer global min_cost MOD = 1_000_000_007 fields = [[999_999 for _ in range(m)] for __ in range(n)] fields[0][0] = 0 for p in puddles: fields[p[1] - 1][p[0] - 1] = -999 # 웅덩이 표시 for i in range(n): for j in range(..
😉 아이디어1. _!banned_id!_패턴을 기준으로 _!user_id!_를 순회하며 경우의 수 완성2. 경우의 수를 구성하는 유저는 동일하지만 패턴이 다양해서 다른 경우의 수로 판별됨 👉 순서 상관없는 조합 산출 필요3. 산출된 경우의 수를 정렬하고 튜플과 세트 자료형으로 중복방지😉 풀이count = 0# 중복된 튜플이 담기지 않도록 set 자료형 사용result = set([])def solution(user_id, banned_id): answer = 0 max_depth = len(banned_id) combination([], 0, user_id, banned_id, max_depth) return len(result)def combination(arr, depth,..
😉 아이디어1. 그래프의 엣지를 제거 후 남은 그래프 중 한 지점으로 뻗치는 엣지 개수 확인2. _!전체 - 엣지 개수!_가 나머지 👉 이후 문제의 요구사항대로 최소값 산출😉 풀이towers = 0def solution(n, wires): global towers graph = [[] for _ in range(n)] answer = 99_999 # 그래프 그리기 for wire in wires: x = wire[0] - 1 y = wire[1] - 1 graph[x].append(y) graph[y].append(x) # print(f'처음 만들어진 그래프 = {graph}') ..
SELECT A.ID, A.GENOTYPE, B.GENOTYPE AS PARENT_GENOTYPEFROM ECOLI_DATA ALEFT JOIN ECOLI_DATA B ON A.PARENT_ID = B.IDWHERE A.GENOTYPE & B.GENOTYPE = B.GENOTYPEORDER BY A.ID# 데이터 확인용# SELECT# A.ID,# CONV(A.GENOTYPE, 10, 2) AS 'GENOTYPE',# CONV(B.GENOTYPE, 10, 2) AS 'PARENT_GENOTYPE',# CONV(A.GENOTYPE & B.GENOTYPE, 10, 2) AS '일치하는 부분'# FROM# ECOLI_DATA A# LEFT JOIN# ..
😉 아이디어1. _!우측 하단 마름모를 차지할 경우 or 그렇지 않은 경우!_를 구분2. 각 경우의 수에 맞게 배열에 값 저장😉 풀이def solution(n, tops): a = [0] * (n + 1) b = [0] * (n + 1) if (tops[0]): a[1] = 1 b[1] = 3 else: a[1] = 1 b[1] = 2 MOD = 10_007 for i in range(2, n + 1): a[i] = (a[i - 1] + b[i - 1]) % MOD if (tops[i - 1]): b[i] = (a[i - 1] * 2 + b[i - 1] ..