전체 글

말보다는 실천하는 사람
😉 아이디어1. 이진탐색 기반으로 _!1 ~ 200000000!_의 범위 중 얼마나 많은 사람들이 징검다리가 통과가능한지 찾는 문제😉풀이def solution(stones, k): left, right = 1, 200_000_000 maxPeople = 0 while left = k: break else: blockedCnt = 0 # 건널 수 없는 돌의 개수 확인 if blockedCnt >= k: # 막힌 돌이 k개 이상이면 실패 right 감소 right = mid - 1 else:..
😉 아이디어1. 동적 프로그래밍 처리 문제2. 현 Row의 인덱스를 기준으로 이전 Row와 합산이 가능한 경우의 수 중 최대 산출3. 현재 Row의 값에 반영하고 다음 행 진행😉 풀이def getValue(prevRow, currentValue, blockedIndex): # 이전에 사용한 인덱스 외 모든 경우의 수 비교 maxValue = -1 #print('prevRow', prevRow) for i in range(len(prevRow)): if i == blockedIndex: continue prevValue = prevRow[i] maxValue = max(maxValue, prevValue + currentVa..
😉 아이디어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}') ..
thisisdj
codenextdoor