전체 글 241

위장

문제 https://programmers.co.kr/learn/courses/30/lessons/42578 코딩테스트 연습 - 위장 programmers.co.kr 해결방법 옷을 조합할 수 있는 경우의 수는 각 옷의 종류(상의,하의,모자 등)의 가짓수를 곱해주면 되는데 이렇게 계산하게 되면 하나씩 안 입은 경우는 포함되지 않게 된다. 따라서 종류의 가짓수에 1을 더한 수를 곱해주고, 아무것도 안 입은 경우는 없다고 했으므로 이 경우를 결과에서 제외하기 위해 -1을 해준다. 그 후 값을 출력하면 조합할 수 있는 모든 경우의 수를 출력할 수 있다. clothes = [["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "hea..

전화번호 목록

문제 https://programmers.co.kr/learn/courses/30/lessons/42577 코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조 programmers.co.kr 첫 번째 해결방법 문제를 0번째 인덱스가 접두어 인 경우 False를 반환하는 것으로 잘 못 이해하고 푼 코드 먼저 key값을 0번째 인덱스로 정하고, 지워준다. 그 후 기본 결과를 True로 넣어준 후, 접두사와 숫자 단위가 같아지도록 숫자를 변환한 후 answer에 넣어주었다. 그 후 answer값과 0번째 인덱스의 값이 같다면 False를 넣고 다..

완주하지 못한 선수

문제 https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr 첫 번째 해결방법 이름을 해쉬 값으로 잡아 True를 넣어준 후, 완주 한 멤버들의 이름을 해쉬에서 지운 후, 남아있는 키 값만 반환한다. -> 동명이인이 있을 경우 둘의 이름을 다 삭제해버려서 원하는 결과를 얻지 못했다. def solution(participant,completion): dict = {} for key in parti..

백준 2908번 상수

문제 첫번째 해결방법 제일 마지막에 들어온 숫자(1의 자리 숫자)가 제일 먼저 들어온 숫자(100의 자리 숫자)와 값이 바뀐 후 바뀐 숫자로 크기 비교를 해야하므로, 스택을 이용하여 숫자를 하나씩 빼서 배열에 저장한 후 정수형으로 변환하여 숫자의 크기를 비교하였다. a,b = input().split() a = list(a) b = list(b) result_a = [] result_b = [] while a and b: res_a = a.pop() res_b = b.pop() result_a.append(res_a) result_b.append(res_b) num_a = (int(result_a[0]) * 100) + (int(result_a[1])* 10) + int(result_a[2]) num_b..

Algorithm/백준 2022.03.31

농심 라면공장

문제 해결방법 남아있는 재고가 정상적으로 돌아오는 날 까지 재고가 1이라도 남아있어야 하고, 또한 재료를 사오는 날까지도 남은 재고가 있어야 하므로 그 조건 문을 걸어준 후 많은 재고를 찾기 위해 값들을 힙에 넣어준다. -> 음수로 값을 넣어주면 max힙으로 구현할 수 있다 그 후 인덱스를 1 증가시켜주고, 재료를 사온 횟수도 하나 더한 후, 힙에서 가장 큰 재고를 꺼내 남아있는 재고에 더해준 후 재료를 사온 횟수를 리턴해주면 값을 구할 수 있다. import heapq ramen_stock = 4 supply_dates = [4, 10, 15] supply_supplies = [20, 5, 10] supply_recover_k = 30 def get_minimum_count_of_overseas_sup..

BFS 구현하기

BFS BFS는 너비우선탐색이라고도 하며, 노드를 깊게 탐색하는 DFS와 달리 인접한 노드들을 먼저 하나씩 탐색하는 방법으로 큐를 사용하여 구현할 수 있다. # 위의 그래프를 예시로 삼아서 인접 리스트 방식으로 표현했습니다! graph = { 1: [2, 3, 4], 2: [1, 5], 3: [1, 6, 7], 4: [1, 8], 5: [2, 9], 6: [3, 10], 7: [3], 8: [4], 9: [5], 10: [6] } def bfs_queue(adj_graph, start_node): queue = [start_node] visited = [] while queue: cur_node = queue.pop(0) visited.append(cur_node) for adj_node in adj_g..

DFS 구현하기

DFS DFS는 깊이우선탐색이라고도 하며, 인접한 노드를 끝까지 모두 탐색한 후 방문하지 않은 노드가 없다면 다시 돌아가서 탐색하는 과정을 반복하여, 모든 노드가 방문하는 방법이다. 1. 재귀함수로 구현하기 시작 노드를 입력 받아 방문한 노드에 넣고, 인접한 노드가 방문하지 않은 노드라면, 함수를 재귀적으로 다시 호출한다. # 위의 그래프를 예시로 삼아서 인접 리스트 방식으로 표현했습니다! graph = { 1: [2, 5, 9], 2: [1, 3], 3: [2, 4], 4: [3], 5: [1, 6, 8], 6: [5, 7], 7: [6], 8: [5], 9: [1, 10], 10: [9] } visited = [] def dfs_recursion(adjacent_graph, cur_node, visi..

힙 구현하기

1. 힙에 데이터 삽입하기 맨 마지막 인덱스에 데이터를 추가 한 후 부모노드와 비교 해 가면서 부모노드보다 더 큰 경우 부모노드와 위치를 바꿔주면서 힙의 형태를 가질 때 까지 반복한다. class MaxHeap: def __init__(self): self.items = [None] def insert(self, value): self.items.append(value) cur_index = len(self.items) - 1 while cur_index > 1: parent_index = cur_index // 2 if self.items[cur_index] > self.items[parent_index]: self.items[cur_index], self.items[parent_index] = sel..

멜론 베스트 앨범 뽑기

문제 해결 방법 해쉬로 많이 재생된 장르를 찾아낸 후 다시 해쉬로 각 장르별 인덱스와 재생횟수를 저장한다. 그 후 많이 재생된 장르순으로 인덱스와 재생횟수를 저장 한 후 인덱스만 꺼내 두 개 씩만 뽑아낸다. genres = ["classic", "pop", "classic", "classic", "pop"] plays = [500, 600, 150, 800, 2500] def get_melon_best_album(genre_array, play_array): n = len(genre_array) genre_total_play_dict = {} genre_index_play_array = {} for i in range(n): # 해쉬로 값을 저장하기 위해 장르와 재생횟수를 꺼낸다. genre = genr..

올바른 괄호

문제 첫 번째 해결방안 괄호의 개수가 같으면 올바르게 짝지어진 것이고, 개수가 다르다면 올바르지 않게 짝 지어진 것이라고 생각하여 각 괄호의 수를 세어 같으면 True를 반환하고 같지 않으면 False를 반환하는 방식으로 코드를 짰다. input = "(())()" def is_correct_parenthesis(string): left = 0 right = 0 for i in string: if i == '(': left += 1 if i == ')': right += 1 if left == right: return True else: return False print(is_correct_parenthesis(input)) 그러나 괄호의 개수가 같더라도 반대로 쓰여진 경우 예를 들어 (())인 경우가 ..