해결 과정 여러 개념들이 섞여 있는 문제다. 처음 풀이로는 시간 초과. 소수 찾기 - 에라토스테네스의 체 특히 이 문제는 투 포인터라는 개념을 알아야 했다. 즉, 연속적으로 이어진 배열의 합을 찾을 때, O(n*n)이 아니라, O(n) 선형 시간으로? 이 부분을 이해해보자. 나의 풀이 다음 두 글을 참고했다. https://wikidocs.net/21638 https://freedeveloper.tistory.com/393 def getNum(n, m, data): count = 0 interval_sum = 0 end = 0 # start를 차례대로 증가시키며 반복 for start in range(n): # end를 가능한 만큼 이동시키기 while interval_sum < m and end < n..
해결 과정 정렬 테마를 알고 있어서, 정렬 후 앞 뒤 하나만 비교하면 되겠다는 IDEA는 얻었는데, input()으로 받으니까 시간초과 나는 것이었음; 이곳을 참고해서 input()대신 sys.stdin.readline().strip() 사용. ㅋㅋ 그런가보다. 나의 풀이 import sys def solution(): n = int(input()) arr = [] for _ in range(n): # arr.append(input()) arr.append(sys.stdin.readline().strip()) arr.sort() for i in range(1, n): if arr[i].startswith(arr[i-1]): return "NO" return "YES" t = int(input()) for..
해결 과정 처음에 푼 풀이 -> 시간초과 앞에 것 자른 풀이 -> 메모리초과 결국 스택 사용하라나 보다 싶어서 스택 IDEA 보고, 구현해봄. 나의 풀이 def solution(): str = input() explosion = input() eLen = len(explosion) end = explosion[-1] stack = [] for s in str: stack.append(s) if s == end and "".join(stack[-eLen:]) == explosion: for _ in range(eLen): stack.pop() if not stack: return "FRULA" return "".join(stack) print(solution()) 다른 풀이 이 분 블로그 글을 참고했다. ..
해결 과정 하라는 대로 풀면 된다. 나의 풀이 def solution(): N, K = map(int, input().split()) nSet = set(input() for _ in range(N)) kSet = set(input() for _ in range(K)) answerList = list(nSet.intersection(kSet)) print(len(answerList)) for i in sorted(answerList): print(i) solution()
해결 과정 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..