목록알고리즘/프로그래머스 (48)
여름의 서재
📕 문제 https://programmers.co.kr/learn/courses/30/lessons/72413 코딩테스트 연습 - 합승 택시 요금 6 4 6 2 [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] 14 6 4 5 6 [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4 programmers.co.kr 💡 풀이법 1. 노드들 중 어디까지 같이 가다가 서로 갈리는 길을 모르기 ..
📕 문제 https://programmers.co.kr/learn/courses/30/lessons/42628 코딩테스트 연습 - 이중우선순위큐 programmers.co.kr 💡 풀이법 : 최대힙과 최소힙을 두개 만들어서 삽입할 때는 두개 다 넣고, 최대값을 삭제할 때는 최대힙에서 빼고, 최소값을 삭제할 때는 최소힙에서 뺀다. (단, 뺄 때 다른 힙에서는 뺀 원소를 삭제해줘야함) import heapq def solution(operations): answer = [0,0] min_heap = [] max_heap = [] cnt = 0 for o in operations: oper = o.split() if oper[0] == 'I': num = int(oper[-1]) heapq.heappush(m..
📕 문제 https://programmers.co.kr/learn/courses/30/lessons/81302 코딩테스트 연습 - 거리두기 확인하기 [["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1] programmers.co.kr 💡 풀이법 1. bfs를 이용해서 풀었다. 2. deq에 x와 y그리고 시작점과의..
📕 문제 https://programmers.co.kr/learn/courses/30/lessons/81301 코딩테스트 연습 - 숫자 문자열과 영단어 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자 programmers.co.kr 💡 풀이법 word = {'zero':'0', 'one':'1', 'two':'2', 'three':'3', 'four':'4', 'five':'5', 'six':'6', 'seven':'7', 'eight':'8', 'nine':'9'} def solution(s): answer = '' flag = True for i in s: if no..
📕 문제 https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 💡 풀이법 1. 들어오고 나가는 행위를 담을 리스트 actions와 그때마다의 행위의 주체를 담을 리스트 users를 만든다. 그리고 user들의 닉네임을 담을 딕셔너리 nicknames를 만들었다. 2. record를 돌면서 enter일때는 actions에 0을 추가하고 닉네임을 갱신한다. leave일때는 actions에 1을 추가한다. change일..
📕 문제 https://programmers.co.kr/learn/courses/30/lessons/67258 코딩테스트 연습 - 보석 쇼핑 ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr 💡 풀이법 1. 만약 중복을 제거한 보석의 개수(unique_l)가 1이면 바로 [1,1]을 반환한다. 2. 투포인터(start, end)를 이용한다. 3. end를 1씩 증가시키면서 탐색을 한다. 4. 매순간마다 첫번째에 있는 보석의 개수를 확인하고 1보다 크면 start 포인터를 1증가시키고 첫번째 보석의 개수를 1 감소시킨다. 5. 딕셔너리의 키값과 unique_l이 같다면 현재 범위가 모든 종류..
📕 문제 https://programmers.co.kr/learn/courses/30/lessons/42627 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 programmers.co.kr 💡 풀이법 import heapq def solution(jobs): l = len(jobs) heapq.heapify(jobs) first = heapq.heappop(jobs) time = first[0] + first[1] answer = first[1] while jobs: ready = [] heapq.heapify(ready) for i..
📕 문제 https://programmers.co.kr/learn/courses/30/lessons/81303 코딩테스트 연습 - 표 편집 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO" programmers.co.kr 💡 풀이법 : 그냥 리스트를 사용하면 한번 움직일 때 시간 복잡도가 O(n)이지만 연결리스트를 이용하면 O(1)이다. 해당 숫자의 앞 숫자와 뒤 숫자를 담는 리스트를 값으로 하는 딕셔너리를 만든다. 1. 위, 아래로 내려가는 함수와 삭제하는 함수를 따로 만든다. 2. 삭제하게 되면 삭제하는 숫자의 ans..