알고리즘 91

[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

[Python | 프로그래머스 | Lv_2] 2 x n 타일링

😉 아이디어1. 특이케이스 생성에 집중 👉 n > 2 이상부터는 특이케이스 없음 2. n = 1 or 2의 특이케이스로 점화식 생성😉 풀이def solution(n): answer = 0 # n = 1 -> 1 (1) # n = 2 -> 2 (1) # n = 3 -> 3 (0) # n = 4 -> f(3) * 1 + f(2) * 1 + f(1) * 0 # n = 5 -> f(4) * 1 + f(3) * 1 + f(2) * 0 + f(1) * 0 # 패턴: [0, 1, 1, 0, 0, ...] dp = [0, 1, 2, 3] pattern = [0, 1, 1, 0, 1, 0] isZero = True for i in range(4, n + 6): val = (dp[i - 1] + dp[i -..

알고리즘 2024.05.29

[Python | 프로그래머스 | Lv_3] 단속카메라

😉 아이디어이전 차량의 종료위치 _!end 기준으로 정렬하면 end 이전에 모든 경로를 통틀어 1개의 카메라로 취급가능😉 풀이def solution(routes): answer = 0 routes.sort(key = lambda x : (x[1])) print('routes', routes) prev = [-30_001, -30_001] for route in routes: start, end = route # prev 내에서 단 1개만 필요 -> 범위가 벗어날 경우만 카메라 추가 if prev[1] ✔ 링크 : https://school.programmers.co.kr/learn/courses/30/..

알고리즘 2024.05.22

[Python | 프로그래머스 | Lv_3] 아방가르드 타일링

😉 아이디어1. n이 7미만일 경우까지 각 특수한 조합 개수 확인 👉 [1, 2, 5, 2, 2, 4]반복됨2. 3의 배수로 반복되고 있으므로f(n + 3) - f(n)를 통해 f(n)의 점화식 계산😉 풀이 def solution(n): dp = [0] * (n + 10) dp[1] = 1 dp[2] = 3 dp[3] = 10 MOD = 1_000_000_007 # n이 6 이하인 경우 저장 for i in range(4, n + 1): if i == 4: dp[i] = dp[i - 1] + dp[i - 2] * 2 + dp[i - 3] * 5 + 2 elif i == 5: ..

알고리즘 2024.05.11

[Python | 프로그래머스 | Lv_2] 양궁대회

😉 아이디어1. 어피치를 이겨야하는 경우or 져야하는 경우로 구분 경우의 수 배열 저장2. 각 경우를 순회하며 화살의 개수를 고려, 나의 점수및 어피치의 점수 계산3. 문제 내의 다양한 예외조건 분기처리😉 풀이combinations = []def solution(n, info): answer = [] # true, false 조합 for i in range(0, 12): combination([0] * 11, 0, 0, i) max_gap = -1 max_case = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] for co in combinations: arrows = n ..

알고리즘 2024.05.11