본문 바로가기

알고리즘/프로그래머스(Python)

(39)
스택 - 기능개발 / 파이썬 def solution(progresses, speeds): answer, lst = [], [] for p, s in zip(progresses, speeds): cnt = 0 while p < 100: p += s cnt += 1 lst.append(cnt) front = 0 for i in range(len(lst)): if lst[front] < lst[i]: answer.append(i - front) front = i answer.append(len(lst)-front) return answer programmers.co.kr/learn/courses/30/lessons/42586# 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일..
스택 - 주식가격 / 파이썬 def solution(prices): answer = [0] * len(prices) for i in range(len(prices)-1): for j in range(i+1, len(prices)): if prices[j] < prices[i]: answer[i] += 1 break else: answer[i] += 1 return answer programmers.co.kr/learn/courses/30/lessons/42584 코딩테스트 연습 - 주식가격 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00 programmer..
bfs - 단어 변환 / 파이썬 from collections import deque def ck(w1, w2): cnt = 0 lenth = len(w1) for i in range(lenth): if w1[i] == w2[i]: cnt += 1 return True if cnt == lenth-1 else False def solution(begin, target, words): if target not in words: return 0 q = deque() for w in words: if ck(begin, w): q.append([w, 1]) while q: word, cnt = q.popleft() if word == target: return cnt for w in words: if ck(word, w): q.append([..
dfs, bfs - 네트워크 / 파이썬 dfs 풀이 def solution(n, computers): visit = [0] * n def dfs(com): visit[com] = 1 for idx, num in enumerate(computers[com]): if idx == com or visit[idx] or num == 0: continue dfs(idx) answer = 0 for i in range(n): if visit[i] == 0: dfs(i) answer += 1 return answer bfs 풀이 from collections import deque def solution(n, computers): answer = 0 visit = [0] * n for i in range(n): if visit[i]: continue q ..
bfs - 타겟 넘버 / 파이썬 from collections import deque def solution(numbers, target): answer = 0 q = deque() q.append([numbers[0], 0]) q.append([-numbers[0], 0]) while q: hap, idx = q.popleft() if idx == len(numbers)-1: if hap == target: answer += 1 else: q.append([hap+numbers[idx+1], idx+1]) q.append([hap-numbers[idx+1], idx+1]) return answer programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정..
완전탐색 - 소수 찾기 / 파이썬 from itertools import permutations def ck(num): ck_num = 0 for i in range(2, num+1): if num % i == 0: ck_num += 1 if ck_num == 2: return False return True def solution(numbers): answer = 0 num_set = set() for i in range(1, len(numbers)+1): lst = list(map(''.join, permutations(numbers, i))) for j in lst: if int(j)
해시 - 베스트 앨범 / 파이썬 def solution(genres, plays): dic, hap = {}, {} i = 0 for g, p in zip(genres, plays): if g not in dic: dic[g] = [[p, i]] hap[g] = p else: dic[g].append([p, i]) hap[g] += p i += 1 s_hap = sorted(hap.items(), key=lambda x: x[1], reverse=True) ret = [] for k, _ in s_hap: lst = sorted(dic[k], key=lambda x: x[0], reverse=True) if len(lst) > 2: lst = lst[:2] for _, num in lst: ret.append(num) return re..
해시 - 전화번호 목록 / 파이썬 def solution(phone_book): phone_book.sort() for num1, num2 in zip(phone_book, phone_book[1:]): if num2.startswith(num1): return False return True zip 함수 - 여러개의 Iterable 동시에 순회 startswith - 시작하는지 여부 programmers.co.kr/learn/courses/30/lessons/42577 코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조 programmers.co.kr