2022(112)
-
깊이/너비 우선 탐색(DFS/BFS) - 여행경로 (Lv.3) [2]
이문제 저번에도 풀었던 문제인데...이번에도 못풀었다. 너무 짜증난다... 일년이 지났는데 실력이 그대로라는 소리인거 같은 느낌 (사실...일한다고 열심히 한건 아니기에 크게 할말은 없지만... ㅠ.ㅠ 그래도 안한건 아니였다구,,,,) 쨌든 저번과 다른점이 있다면 이번에는 DFS로 접근했다는 사실이다. 그러나 재귀함수를 돌면서 결과값이 없어서 None이 나오는 문제를 반복(이 부분은 추후에 제대로 파헤쳐볼 것이다...)하다보니 해결 방법을 찾지 못하고, 결국 다른 사람의 풀이를 참고했다. from collections import defaultdict def dfs(ticketDict, N, start, result): if len(result) == N+1: return result for idx, e..
2022.10.15 -
21610 - 마법사 상어와 비바라기
레벨 5 문제로 크게 어렵지 않은 문제였다... 시간초과만 아니라면!!! 진짜 문제푸는데 걸린시간보다 시간초과 해결하는데 걸린시간이 더 긴 것 같다. 아래는 제일 처음 냈던 풀이 방식이다. # 비구름 : [N, 1], [N, 2], [N-1, 1], [N-1, 2] # 구름의 이동 M번 명령 global makeCloud N, M = map(int, input().split()) graph = [] for _ in range(N): graph.append(list(map(int, input().split()))) ds = [] for _ in range(M): ds.append(list(map(int, input().split()))) makeCloud = [[N-1, 0], [N-1, 1], [N-2,..
2022.09.27 -
두 큐 합 같게 만들기 _ Lv.2*
이번 문제는 사실 문제를 보고 아무리 생각해봐도 어떻게 간단하게 풀 수 있지?라는... 두려움?? 때문에 30분 고민해보다가 다른 사람의 풀이를 참고했다. 근데 이거 그래도 한시간 고민 했으면 풀이 방법을 고안하지 않았을까 싶은 문제였다... 풀이는 두 큐의 합이 같아지는 elementSum을 구하여 이를 기준으로 합이 큰 큐는 원소를 빼주고, 합이 작은 큐에 그 원소를 넣어주는 방식으로 반복한다. 그런데 이문제는 출제 원소에 따라 시간초과에 걸리는 부분이 있어서 while문의 횟수를 제한한다는 점, sum이 아니라 pop한 값을 더하고/빼는 방식으로 큐의 합을 구한다는 점을 통해 해결하였다. 그럼에도 불구하고! 아래의 풀이는 테케 2개에서 시간초과가 나왔다...ㅠ.ㅠ from collections im..
2022.09.10 -
크레인 인형뽑기 게임 _ Lv.1
매번 내가 푼 문제와 비교해보는데... 나보다 간결하고 쉽게 푼 사람들 보면 "통과"에 의의를 뒀던 과거의 내가 부끄러워지고, 효율성과 적절한 알고리즘을 고려하여 문제를 푸는 것이 중요하다는 생각이 든다. from collections import deque def solution(board, moves): answer = 0 pickQueue = [deque([]) for _ in range(len(board))] for i in range(len(board)): for j in range(len(board)): if board[i][j] != 0: pickQueue[j].appendleft(board[i][j]) resultQueue = deque([]) lastDoll = 0 for m in mov..
2022.09.09 -
성격 유형 검사하기 _ Lv.1
흠....굉장히 풀면서도 풀이가 마음에 안드는 문제였다. 다시 최적화해서 풀어볼 예정! # 매우동의 또는 매우비동의 = 3점 # 동의 또는 비동의 = 2점 # 약간 동의 또는 약간 비동의 = 1점 # 모르겠음 = 0점 # 성격 유형 점수가 같으면, 사전 순으로 빠른 성격 유형을 검사자의 유형이라 판단 def solution(survey, choices): grade = [0, 3, 2, 1, 0, 1, 2, 3] TFMNstr = "TFMN"; RCJAstr = "RCJA"; answer = '' RCJA = [0, 0, 0, 0] # RT , CF, JM, AN TFMN = [0, 0, 0, 0] for i in range(len(choices)): if choices[i] > 4: if survey[..
2022.09.06 -
키패드 누르기 _ Lv.1
이번 문제는 쪼꼼 시간이 들었지만 0이 키패드를 좌표로 나타냈을 때 [3, 1]에 위치한다는 점, 처음 손가락이 *과 #에 위치한다는 점을 간과하여 시간이 더 들었다. 그래도 키패드를 좌표화 해서 풀면 크게 어렵지 않은 문제였다 :) def solution(numbers, hand): # 1, 4, 7은 왼쪽 엄지 # 3, 6, 9는 오른쪽 엄지 # 2, 5, 8, 0은 두 엄지손가락의 현재 키패드 위치에서 더 가까운 엄지손가락 - 둘다 거리가 같다면 오른손잡이는 오른쪽, 왼손잡이는 왼쪽 answer = '' rh = 0; lh = 0; d = [[3, 1], [0,0], [0,1], [0,2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]] handLocR = [..
2022.09.06