본문 바로가기
반응형

Algorithm60

[프로그래머스] 파이썬 문제풀이 - 섬 연결하기 https://school.programmers.co.kr/learn/courses/30/lessons/42861 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 풀이 1. 섬들을 모두 연결해야하고 이 때 최소 비용으로 연결하는 방법을 찾는다면 크루스칼 알고리즘을 사용할 수 있다 2. 섬들을 연결하는 비용으로 정렬한다 3. 적은 비용부터 하나씩 탐색하여 연결된 부모 노드를 찾거나 부모노드라면 더 작은 노드로 값을 바꾼다 def solution(n, costs): def getparent(parent,n): if parent[n]!=n: parent[n].. 2023. 5. 22.
[알고리즘] 크루스칼 알고리즘 크루스칼은 최소 비용 신장 트리를 만들기 위한 대표적인 알고리즘으로 가장 적은 비용으로 모든 노드를 연결하기 위해 사용한다. 즉 노드를 연결해 모든 노드가 다 연결되게 할 때 제일 적은 비용을 사용하는 방법을 찾는것이다. 예를 들어 여러 개의 도시가 있을 때 각 도시를 도로를 이용해 연결할 때 최소한의 비용으로 하는 알고리즘 노드=정점=도시 -> 그래프에서 동그라미 부분 간선=거리=비용 -> 그래프에서 선에 해당하는 부분 최소비용신장트리의 간선숫자는 노드숫자 -1이다 위 그래프에서 노드는 7개, 간선은 10개, 최소비용신장트리의 간선 숫자는 6개이다 크루스칼 구현 과정 1. 모든 간선 정보를 오름차순으로 정렬 2. 비용이 적은 간선부터 사이클이 발생 안 한다면 차근차근 그래프에 포함. 사이클이 발생하면 .. 2023. 5. 22.
[프로그래머스] 파이썬 문제풀이 - 가장 먼 노드 https://school.programmers.co.kr/learn/courses/30/lessons/49189 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 첫 풀이 1. 그래프 문제에서는 먼저 간선을 탐색하며 리스트형태로 저장해준다 2. 양방향일때는 양쪽다 넣어주어야한다 3. from collections import deque def solution(n, edge): answer = 0 q=deque([1]) ch=[[] for _ in range(n+1)] dis=[-1]*(n+1) dis[1]=0 for e in edge: ch[e[0]].ap.. 2023. 5. 19.
[프로그래머스] 파이썬 문제풀이 - 피로도 https://school.programmers.co.kr/learn/courses/30/lessons/87946 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 풀이 1. dfs나 bfs를 통한 탐색으로 풀수도 있겠지만 배열의 순서에 따라서도 결과가 다르기 때문에 순열을 사용했다 2. 순열을 사용해서 던전을 들어가는 모든 경우의 수를 뽑았다 3. 모든 경우의 수를 탐색하여 들어갈수있으면 +1을 하고 최대 던전 수 보다 크다면 교체했다 from itertools import permutations def solution(k, dungeons): answ.. 2023. 5. 19.
[프로그래머스] 파이썬 문제풀이 - 행렬의 곱셈 https://school.programmers.co.kr/learn/courses/30/lessons/12949 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 첫 풀이 1. 전에 numpy를 다뤄본적이 있어 numpy 라이브러리를 사용했다 2. numpy에는 행렬을 다루는 기능이 있어 편리하다 3. 우리가 생각하는 곱은 행렬에서 @이다. *은 원소별로 곱하기다 import numpy as np def solution(arr1, arr2): answer = [] arr_1 = np.array(arr1) arr_2 = np.array(arr2) arr_ne.. 2023. 5. 16.
[프로그래머스] 파이썬 문제풀이 - [카카오 인턴] 보석 쇼핑 https://school.programmers.co.kr/learn/courses/30/lessons/67258 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 첫 풀이 1. 보석 종류 개수부터 gems의 길이까지 늘려가며 모든 경우의 수를 구한다 2. 모든 보석을 갖고있고 구간이 짧은 곳을 찾는다 def solution(gems): jw=list(set(gems)) a,b=100000,200001 for i in range(len(jw),len(gems)+1): for j in range(len(gems)-i+1): tmp=gems[j:j+i] tmp=.. 2023. 5. 14.
[프로그래머스] 파이썬 문제풀이 - 불량 사용자 https://school.programmers.co.kr/learn/courses/30/lessons/64064 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 첫 풀이 1. 정규표현식을 사용하기위해 *을 .로 바꿔준다. 정규표현식에서 . 은 아무 문자 상관없이 탐지한다는 뜻이다 2. banned_id에서 단어별로 user_id에서 패턴이 일치하는 단어를 삽입한다 입출력 예1 [('fradi', 'frodo'), ('abc123',)] 3. 위의 리스트에서 단어를 하나씩 고른다. 중복되면 안됨 import re def solution(user_id, ba.. 2023. 5. 14.
[프로그래머스] SQL 문제풀이 - 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 https://school.programmers.co.kr/learn/courses/30/lessons/157339 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서 자동차 .. 2023. 5. 14.
[프로그래머스] MYSQL 문제풀이 - 입양 시각 구하기(1) https://school.programmers.co.kr/learn/courses/30/lessons/59412 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다. 첫 풀이 1. DATETIME에서 시간을 추출하여 GROUP BY 한다 2. 추출한 시간을 이용하여 9시에서 19시 사이를 구한다 SELECT CONVERT(substring(DATETIME,12,2),SIGNED INTEGER) as hou.. 2023. 5. 13.
728x90