분류 전체보기 107

[Python | 프로그래머스 | Lv_3] 징검다리 건너기

😉 아이디어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:..

알고리즘 2024.07.18

[Python | 프로그래머스 | Lv_2] 땅따먹기

😉 아이디어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..

알고리즘 2024.07.17

[Python | 프로그래머스 | Lv_2] n ^ 2 배열 자르기

😉 아이디어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..

알고리즘 2024.07.10

[Python | 프로그래머스 | Lv_3] 불량 사용자

😉 아이디어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,..

알고리즘 2024.06.27

[Python | 프로그래머스 | Lv_2] 전력망을 둘로 나누기

😉 아이디어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}') ..

알고리즘 2024.06.26

[SQL | 프로그래머스 | Lv_2] 부모의 형질을 모두 가지는 대장균 찾기

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# ..

알고리즘 2024.06.13