[Programmers] Level 3. 합승 택시 요금
·
코딩테스트/Python
🔗 Problem Link 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ❔Thinking A,B 두 사람이 S지점에서 출발하여 각자의 집 C,D로 가는 택시 합승 최소 비용을 반환한다. (합승하지 않을 수 있다.) 💻Solution def solution(n, s, a, b, fares): INF = int(1e9) answer = INF # 2차원 그래프 생성 graph = [[INF] * (n+1) for i in range(n+1)] # 그래프 초기화 for i in range(1,n+1): for j in range(1, n+1): if i ==..
[Programmers] Level 3. 여행경로
·
코딩테스트/Python
🔗 Problem Link 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ❔Thinking 출발지, 도착지가 적힌 ticket이 주어질 때, 모든 여행지를 방문하는 여행 경로를 반환한다. 💻Solution from collections import defaultdict def solution(tickets): answer = [] # ticket 도착지 내림차순 정렬 tickets = sorted(tickets, key=lambda x: x[1], reverse=True) # 티켓 그래프 생성 tickets_dict = defaultdict(list) f..
[Algorithm] LIS(Longest Increase Sequence)
·
Python 활용하기
LIS(Longest Increase Sequence)란? LIS 알고리즘은, 주어진 수열에서 숫자를 제외시켜 최장 길이의 오름차순 수열을 만드는 알고리즘이다. LIS 구현 1. 이중 반복문을 통한 구현 (O(N^2)) 해당 구간까지의 '최장 증가 부분수열'의 크기를 저장하는 별도의 list를 생성하고 이를 업데이트한다. array의 모든 값에 대해, 해당 값 이전까지(0 ~ i-1) 자신보다 큰 값들의(array[j] > array[i]) 개수를 dp[i]에 저장한다. 모든 과정이 끝나면, dp의 가장 큰 값이 array에서 만들 수 있는 '최장 증가 부분수열'의 크기 이다. array = [3,4,1,2,6,4,3,1] dp = [1] * len(array) for i in range(1, len(a..
[Programmers] Level 4. 가사 검색
·
코딩테스트/Python
🔗 Problem Link 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ❔Thinking 한 글자를 의미하는 '?'를 포함하는 쿼리가 여러개 주어질 때, 각 쿼리가 words의 몇 단어와 매치되는지를 반환한다. 💻Solution 1. 이진탐색을 활용한 풀이 from bisect import bisect_left, bisect_right def solution(words, queries): answer = [] word_list = [[] for _ in range(100001)] word_list_reversed = [[] for _ in range(1..
[Programmers] Level 2. 괄호 변환
·
코딩테스트/Python
🔗 Problem Link 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ❔Thinking '균형잡힌 괄호 문자열' p가 주어질 때, '올바른 괄호 문자열'로 변환한 결과를 반환한다. '균형잡힌 괄호 문자열'은 '('와 ')'의 개수가 같은 문자열이다. '올바른 괄호 문자열'은 '균형잡힌 괄호 문자열'이면서 '('와 ')' 짝이 모두 맞는 문자열이다. 💻Solution def bracket_check(s): cnt = 0 for char in s: if cnt < 0: return False cnt += 1 if char == '(' else -1 if ..
[Programmers] Level 3. 자물쇠와 열쇠
·
코딩테스트/Python
🔗 Problem Link 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ❔Thinking key와 lock이 주어질 때, key를 상하좌우, 회전하여 lock의 홈에 끼워넣을 수 있는지를 반환한다. 💻Solution def right_rotate_90_degree(key): new_key = [] for i in zip(*key): new_key.append(list(reversed(i))) return new_key def check(new_lock): n = len(new_lock) // 3 for i in range(n, n*2): for j in..