해결 과정 연속된 하나 이상의 숫자를 모두 뒤집는데, 모두 같은 숫자로 만들 수 있는 최소 횟수 구하기 -> 연속된 하나 이상의 숫자 -> 한 숫자로 만들기 -> 0과 1 중 몇 번 뒤집는게 최소인지 구하기 나의 풀이 def solution(): S = input() tmp = S[0] tmpList = [S[0]] for i in S: if tmp == i: continue else: tmp = i tmpList.append(i) if len(tmpList) == 1: return 0 else: return min(tmpList.count("1"), tmpList.count("0")) print(solution())
해결 과정 여러 개념들이 섞여 있는 문제다. 처음 풀이로는 시간 초과. 소수 찾기 - 에라토스테네스의 체 특히 이 문제는 투 포인터라는 개념을 알아야 했다. 즉, 연속적으로 이어진 배열의 합을 찾을 때, 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()