Coding Test/프로그래머스
-
[프로그래머스 42626번] 더 맵게Coding Test/프로그래머스 2021. 4. 22. 21:05
# 문제 내 풀이 import heapq def solution(scoville, K): answer = 0 # 최소 힙 생성하기 h = [] for i in scoville: heapq.heappush(h, i) while True: low1 = heapq.heappop(h) # 첫 번째 원소가 K보다 크거나 같다면, 루프를 탈출하고 최소 횟수 리턴 if low1 >= K: break # 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우, -1 리턴 if not h: return -1 low2 = heapq.heappop(h) # 가장 덜 매운 두 요소의 스코빌 지수가 0이라면, -1 리턴 if low1 == 0 and low2 == 0: return -1 mixed_s = low1 + 2 *..
-
[프로그래머스 43165] 타겟 넘버Coding Test/프로그래머스 2021. 4. 15. 13:54
# 문제 내 풀이 from collections import deque def solution(numbers, target): answer = 0 # 큐 생성 및 초기화 queue = deque([numbers[0], -numbers[0]]) idx = 1 # BFS 수행 # numbers의 마지막 숫자를 더하고 뺄 때까지 while idx < len(numbers): for _ in range(len(queue)): num = queue.popleft() # 해당 순서의 숫자를 더한 값과 뺀 값을 큐에 삽입 queue.append(num + numbers[idx]) queue.append(num - numbers[idx]) idx += 1 # 큐가 빌 때까지 while queue: if queue.po..
-
[프로그래머스 43162번] 네트워크Coding Test/프로그래머스 2021. 4. 15. 13:50
# 문제 내 풀이 # DFS 정의 def dfs(computers, v, visited, n): # 현재 노드를 방문 visited[v] = True # 현재 노드의 인접 노드를 재귀적으로 방문 for i in range(n): if computers[v][i] and not visited[i]: dfs(computers, i, visited, n) def solution(n, computers): answer = 0 visited = [False] * n # 각 노드의 방문 정보를 표현 # 첫번째 노드부터 순서대로 확인 for v in range(n): # 아직 방문하지 않은 노드라면 if not visited[v]: # dfs를 수행하고 네트워크 수를 하나 셈 dfs(computers, v, visi..
-
[프로그래머스 43163번] 단어 변환Coding Test/프로그래머스 2021. 4. 15. 13:45
# 문제 내 풀이 from collections import deque # 두 단어가 한 글자가 다른 관계인지 체크하는 함수 정의 def one_diff(word, cmp_word): cnt = 0 for i in range(len(word)): if word[i] != cmp_word[i]: cnt += 1 if cnt > 1: break if cnt == 1: return True return False def solution(begin, target, words): answer = 0 n = len(words) visited = [[False] * n for _ in range(n)] # 2차원 방문 정보 테이블 # 큐 생성 및 초기화 # begin과 철자가 하나만 다른 단어를 찾아, 방문 처리하고..
-
[프로그래머스 42747번] H-IndexCoding Test/프로그래머스 2020. 12. 23. 00:12
# 문제 내 풀이 def solution(citations): answer = 0 citations.sort() n = len(citations) cnt = 1 # 뒤에서부터 h번 이상 인용된 논문이 h편 이상이 되는 위치 찾기 for i in range(n - 1, -1, -1): if citations[i] < cnt: answer = cnt - 1 break cnt += 1 # h의 최댓값이 모든 논문의 개수일 경우 if len(citations) == cnt - 1: answer = cnt - 1 return answer 지향할 답안 def solution(citations): citations = sorted(citations) l = len(citations) for i in range(l):..
-
[프로그래머스 42842번] 카펫Coding Test/프로그래머스 2020. 12. 21. 19:38
# 문제 내 풀이 - 시간초과로 문제 풀이 실패, 수정 답안 # 관계식을 구해 이차방정식으로 정리한 다음 근의 공식 사용 def solution(brown, yellow): term = (((brown + 4) / 2) ** 2 - 4 * (brown + yellow)) ** 0.5 w = ((brown + 4) / 2 + term) / 2 h = ((brown + 4) / 2 - term) / 2 return [w,h] 문제점 문제의 조건을 꼼꼼히 보면 조건식 2개로 2차 방정식을 만들어 문제를 해결할 수 있었다. 조건식을 꼼꼼히 보고 수학적 방향의 풀이도 생각해보자.
-
[프로그래머스 42746번] 가장 큰 수Coding Test/프로그래머스 2020. 12. 21. 02:44
# 문제 내 풀이 - 시간초과, 수정 답안 def solution(numbers): numbers.sort(key=lambda x: str(x) * 3, reverse=True) return str(int(''.join(map(str, numbers)))) 원래의 내 풀이 - 완전 탐색으로 접근해 답은 맞으나 시간 초과 from itertools import permutations def solution(numbers): max_num = '0' # 만들 수 있는 가장 큰 수 저장 # 만들 수 있는 모든 수를 순열로 확인 p_numbers = permutations(numbers, len(numbers)) # 모든 경우의 수를 문자열 상태로 비교하며 가장 큰 수 탐색 for p in p_numbers: ..