프로그래머스
-
[프로그래머스 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 *..
-
[Lucian Log] 프로그래머스 월간 코드 챌린지 시즌 2Free Contents 2021. 4. 16. 11:40
종종 프로그래머스 문제를 풀다가 월간 코드 챌린지 시즌 1에 출제된 문제를 마주치곤 했다. 그 때는 어떤 대회인지 살짝 궁금하면서도 슥 지나쳤는데, 이번에 월간 코드 챌린지 시즌 2를 진행한다고 하여 흥미 반, 코딩테스트 감 유지 반으로 참여해 봤다. 이번 월간 코드 챌린지 시즌 2는 4월, 5월 두 번에 걸쳐 진행한다고 하며, 코딩을 좋아하는 20세 이상이면 누구나 참여가 가능하니 가벼운 마음으로 즐길 수 있는 좋은 대회라고 생각한다. 마지막 문제 풀이 끝나고 대쉬보드를 찍었는데, 그리 유의미한 등수는 아니었다 :) 중간에 개인적인 스케줄도 있었던 터라 온전히 집중하지 못하긴 했다. 첫 번째, 두 번째 문제는 금방 풀었는데, 세 번째 문제를 너무 복잡하게 접근했는지 원하는 대로 알고리즘이 동작하지 않아..
-
[프로그래머스 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차 방정식을 만들어 문제를 해결할 수 있었다. 조건식을 꼼꼼히 보고 수학적 방향의 풀이도 생각해보자.