해결 과정 3개 세우고 최대 개수를 찾으라길래 완전탐색 말고 다른 방법이 있나 생각해봤더니 없었음. 결국 완전탐색 및 그래프 + BFS 문제였다. 1시간 이내로 걸림. 다만, 2차원 배열의 복사를 알아야 했다. 나의 풀이 from collections import deque from copy import deepcopy from itertools import combinations def bfs(laboratory, tuple, virus): # ((0, 1), (2, 1), (2, 3)) for i in range(3): laboratory[tuple[i][0]][tuple[i][1]] = 1 queue = deque(virus) # [(0, 1), (2, 1), (2, 3)] dx = [0, 1, 0..
해결 과정 조건이 많았던 풀이였다. 문제 자체를 이해하는 건 어렵지 않지만, 문자열 다루는 것과, 시간초과를 모두 고려해야하는 문제였다. 우선, 여러 번 뒤집는 것을 방지 하기 위한 count를 두고, deque()를 사용한다. popleft(), pop()을 모두 사용하기 위해서다. (물론 일반 arr에서도 pop(0), pop()을 사용할 수 있지만 시간복잡도가 더 된다.) [1,2,3,4] 이런 것을 입력 받거나 출력 하는 것도 이 문제의 포인트였다. 입력시 arr = deque(tmp[1:-1].split(',')) 출력시 "[" + ','.join(arr) + "]" 이 문제의 정답률이 왜 19%인지 알겠다 ㅋㅋ 나의 풀이 from collections import deque def soluti..
해결 과정 10의 자리 숫자 별로 계산해서, dictionary를 만들었다. {'F': 1, 'C': 1010, 'G': 100, 'B': 1, 'E': 10, 'D': 100, 'A': 10000} 이를 정렬하고, 9부터 내림차순으로 곱해주고 결과값을 구하면 된다. 나의 풀이 from collections import defaultdict def solution(): N = int(input()) words = [input() for _ in range(N)] dictionary = defaultdict(int) # {'A' : 100, 'B' : 1010, ... } # dictionary 만들기 for word in words: for idx, value in enumerate(reversed(wo..
해결 과정 완전 탐색으로 풀면 안되는 문제 유형 중 하나. 시간초과가 난다는 것은, 다른 문제 풀이 방법을 의도했다는 것이다. 해결법이 생각나지 않아 다른 분의 블로그를 참고해서 이해한 뒤, 코드는 스스로 작성해봤다. stack을 활용하여 푼 풀이다. 여기서 핵심은, 이전에 탐색 했던 탑 중, 의미없는 탑은 이후 탐색 대상에서 지워버려도 된다는 점이다. 참고로 문제에서 몇 번째 인지는, 1부터 시작한다는 점을 유의하자. 나의 풀이 def solution(): N = int(input()) tops = list(map(int, input().split())) stack = [] # [1, 6], [2, 9], ... [번째, 탑 높이] answer = [] for idx, top in enumerate(t..
해결 과정 그래프 상하좌우 탐색 방법은 이전에 알고 있어서 적용 가능했다. while 문으로 다 처리했는데, 답은 잘 나오지만 시간초과가 발생했다. 문제 유형에 너비우선탐색(BFS)가 있길래, Queue를 떠올리며 시간 초과를 어떻게 없앨지 생각하다가, 이전 풀이에서는 이미 탐색한 것도 재탐색하는 비효율이 있음을 알게 됐다. 다음을 추가해서 시간초과 문제를 해결했다. ripedTomatosCount를 추가해서 전체 처리 개수 세도록 했고, while 문 내에서 for 문 돌릴 때, 이미 센 것에 대해선 처리하지 않도록 처리함. (ripedTomatos = newRipedTomatos 재할당) 나의 풀이 def solution(m, n): answer = 0 dx = [0, 1, 0, -1] dy = [-..