코딩테스트 56

[Python | 프로그래머스 | Lv_3] 입국심사

😉 아이디어1. 이분탐색을 통해 모든 인원이 통과가능한 최적의 값을 탐색2. _!시간 // 심사관의 처리시간!_의 합은 해당 시간 동안 처리 가능한 총 인원😉 풀이def solution(n, times): answer = 0 left = 1 right = 1_000_000_000_000 * 1_000_000_000_000 while left = n: answer = mid right = mid - 1 else: left = mid + 1 return answer✔️ 링크 : https://school.programmers.co.kr/learn/courses/30/lessons..

알고리즘 2024.07.26

[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

[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