Study & Project ✏️/프로그래머스 PCCP 공부 📅 7

[프로그래머스] Graph 복습 및 실습문제(전력망을 둘로 나누기) 풀이 - 파이썬

📖 문제 📃 코드 cnt = 0 def DFS(v, ch, graph): global cnt ch[v] = 1 cnt += 1 for i in graph[v]: if ch[i] == 0: DFS(i, ch, graph) def solution(n, wires): global cnt answer = n graph = [[] for _ in range(n+1)] cnt = [0] * (n-1) for v1, v2 in wires: graph[v1].append(v2) graph[v2].append(v1) for v1, v2 in wires: ch = [0]*(n+1) # 끊는 역할 ch[v2] = 1 cnt = 0 DFS(v1, ch, graph) answer = min(answer, abs(cnt - (n..

[프로그래머스] BFS 복습 및 실습문제(송아지 찾기) 풀이 - 파이썬

📖 문제 현수는 송아지를 잃어버렸습니다. 다행히 송아지에는 위치추적기가 달려 있습니다. 현수의 위치와 송아지의 위치가 수직선 상의 좌표 점으로 주어지면 현수는 현재 위치에서 송아지의 위치까지 다음과 같은 방법으로 이동합니다. 송아지는 움직이지 않고 제자리에 있습니다. 현수는 스카이 콩콩을 타고 가는데 한 번의 점프로 앞으로 1, 뒤로 1, 앞으로 5를 이동할 수 있다. 현수의 위치 s와 송아지의 위치 e가 주어지면 최소 몇 번의 점프로 현수가 송아지의 위치까지 갈 수 있는지 구하는 프로그램을 작성하세요. 최소 점프의 횟수는 1 이상입니다. [제한사항] - 수직선 상의 좌표는 1부터 10,000까지입니다. - s와 e는 같은 값으로 입력되지 않습니다. 📃 코드 from collections import d..

[프로그래머스] DFS 복습 및 실습문제(피로도) 풀이 - 파이썬

📖 문제 댕발자 게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던전 탐험을 마쳤을 때 소모되는 "소모 피로도"가 있습니다. "최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도를 나타내며, "소모 피로도"는 던전을 탐험한 후 소모되는 피로도를 나타냅니다. 예를 들어 "최소 필요 피로도"가 80, "소모 피로도"가 20인 던전을 탐험하기 위해서는 유저의 현재 남은 피로도는 80 이상 이어야 하며, 던전을 탐험한 후에는 피로도 20이 소모됩니다. 이 게임에는 하루에 한 번씩 탐험할 수 있는 던전이 여러 개 있는데, 한 유저가 오늘 이 던..

[프로그래머스] Sorting&Greedy 복습 및 실습문제(단속카메라) 풀이 - 파이썬

📖 문제 댕발자는 고속도로를 이동하는 모든 차량이 고속도로를 이용하면서 단속용 카메라를 한 번은 만나도록 카메라를 설치하려고 합니다. 고속도로를 이동하는 차량의 경로 routes가 매개변수로 주어질 때, 모든 차량이 한 번은 단속용 카메라를 만나도록 하려면 최소 몇 대의 카메라를 설치해야 하는지를 return 하도록 solution 함수를 완성하세요. [제한사항] - 차량의 대수는 1대 이상 10,000대 이하입니다. - routes에는 차량의 이동 경로가 포함되어 있으며 routes[i][0]에는 i번째 차량이 고속도로에 진입한 지점, routes[i][1]에는 i번째 차량이 고속도로에서 나간 지점이 적혀 있습니다. - 차량의 진입/진출 지점에 카메라가 설치되어 있어도 카메라를 만난것으로 간주합니다. ..

[프로그래머스] Two pointers 복습 및 실습문제(보석쇼핑) 풀이 - 파이썬

📖 문제 개발자 출신으로 세계 최고의 갑부가 된 댕발자는 스트레스를 받을 때면 이를 풀기 위해 오프라인 매장에 쇼핑을 하러 가곤 합니다. 댕발자는 쇼핑을 할 때면 매장 진열대의 특정 범위의 물건들을 모두 싹쓸이 구매하는 습관이 있습니다. 어느 날 스트레스를 풀기 위해 보석 매장에 쇼핑을 하러 간 댕발자는 이전처럼 진열대의 특정 범위의 보석을 모두 구매하되 특별히 아래 목적을 달성하고 싶었습니다. 예를 들어 아래 진열대는 4종류의 보석(RUBY, DIA, EMERALD, SAPPHIRE) 8개가 진열된 예시입니다. 진열대 번호 1 2 3 4 5 6 7 8 보석 이름 DIA RUBY RUBY DIA DIA EMERALD SAPPHIRE DIA 진열대의 3번부터 7번까지 5개의 보석을 구매하면 모든 종류의 보..

[프로그래머스] Array 자료구조 복습 및 실습문제(주차 요금 계산) 풀이 - 파이썬

📖 문제 📃 코드 import math # fees = [120, 0, 60, 591] # records = ["16:00 3961 IN","16:00 0202 IN","18:00 3961 OUT","18:00 0202 OUT","23:58 3961 IN"] # result = [0, 591] def solution(fees, records): answer = [] inTime = [0] * 10000 isIn = [0] * 10000 sumT = [0] * 10000 for record in records: a, b, c = record.split() H, M = a.split(":") if c == "IN": # record for initTime -> inTime[3961] = H*60 + M in..

[프로그래머스] Hash 자료구조 복습 및 실습문제(신고 결과 받기) 풀이 - 파이썬

📖 문제 📃 코드 import collections # id_list = ["muzi", "frodo", "apeach", "neo"] # report = ["muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi"] # k = 2 def solution(id_list, report, k): answer = [] # remove repeated report report = list(set(report)) # prevent duplicated reported user name reportHash = collections.defaultdict(set) # counting how many reported user stopped = collecti..