본문 바로가기

CodingTest

(238)
[ BOJ / 파이썬 ] 10026 적록색약 / 정답 코드 / import sys input = sys.stdin.readline from collections import deque # 우 하 좌 상 dx = [0, 1, 0, -1] dy = [1, 0, -1, 0] n = int(input()) colors = [list(input().strip()) for _ in range(n)] answer = [] for k in range(2): visited = [[False]*n for _ in range(n)] result = 0 for i in range(n): for j in range(n): if not visited[i][j]: visited[i][j] = True q = deque([(i,j)]) result += 1 while q: x..
[ BOJ / 파이썬 ] 2504 괄호의 값 음.. sum 값을 따로 빼주는 생각을 못 했다. 쉬울 줄 알았는데 은근 까다로운 문제다.. / 제출 1 / import sys input = sys.stdin.readline brackets = list(input()) stack = [] num = 1 sum = 0 for b in brackets: if b == '(': stack.append(b) num *= 2 elif b == '[': stack.append(b) num *= 3 elif b == ')': if not stack or stack[-1] != '(': sum = 0 break if stack[-1] == '(': sum += num stack.pop() num //= 2 elif b == ']': if not stack or st..
[ BOJ / 파이썬 ] 10799 쇠막대기 / 제출 1 / 이 문제가 스택을 활용하는 유형이라는 것을 알면 그래도 접근하는 난이도가 확 낮아진다. 그래서 그 부분을 눈치 챌 수 있어야겠다. 보통 이렇게 나열식이고 짝 맞춰서 뭔가가 이뤄지는 건 스택일 확률이 높다.(백퍼센트 아니닌까 혹시나헤매지 말것. 확률이 높긴 하니까 의심의 실마리 정도) import sys input = sys.stdin.readline brackets = input() stack = [] result = 0 for b in brackets: if not stack: stack.append(b) continue if b == '(': stack.append('(') if b == ')': if stack[-1] == '(': stack.pop() stack.append(1) ..
[ BOJ / 파이썬 ] 3986 좋은 단어 / 제출 1 / import sys input = sys.stdin.readline n = int(input()) answer = 0 for i in range(n): words = list(input().strip()) stack = [] for word in words: if not stack: stack.append(word) else: if stack[-1] == word: stack.pop() else: stack.append(word) if not stack: answer += 1 print(answer)
[ BOJ / 파이썬 ] 5430 AC / 제출 1 / import sys input = sys.stdin.readline tc = int(input()) for i in range(tc): oper = input().strip() n = int(input()) nums = input() if n == 0: print('error') break nums = nums[1:-2] if len(nums) > 2: nums = list(map(int, nums.split(','))) # oper 에서 RR 처리 while 'RR' in oper: oper = oper.replace('RR', '') # ㅇ이고.. replace는 리턴을 주는 녀석이었다. for o in oper: if len(nums) == 0: nums = 'error' break..
[ BOJ / 파이썬 ] 1021 회전하는 큐 / 제출 1 / import sys input = sys.stdin.readline from collections import deque n, m = map(int, input().split()) q = deque([i+1 for i in range(n)]) target = deque(list(map(int, input().split()))) result = 0 for t in target: left = q.index(t) right = len(q) - left if left < right: while True: curr = q.popleft() if curr == t: break q.append(curr) result += 1 else: newLeft = [] while True: curr = q.po..
[ BOJ / 파이썬 ] 2164 카드 2 / 제출 1 / import sys input = sys.stdin.readline from collections import deque n = int(input()) queue = deque([i+1 for i in range(n)]) while True : queue.popleft() if len(queue) != 1: queue.append(queue.popleft()) else: print(queue.popleft()) break 헐. 진짜 설마설마하면서 잘 만들었다고 생각했는데 IndexError라니.. 진짜 멍충.. 시간복잡도 걱정했는데 의외로 500,000을 넣어도 무리 없이 시간 안에 도는 것 같다. 예상한대로 한 번 계산 시마다 절반씩 값이 줄기 때문인 것 같다. 그래도 매번 IndexE..
[ BOJ / 파이썬 ] 18258 큐2 / 제출 1 / import sys input = sys.stdin.readline from collections import deque n = int(input()) queue = deque([]) for i in range(n): oper = input().strip() if oper[:4] == 'push': oper, x = oper.split(" ") queue.append(x) if oper == 'pop': if queue: print(queue.popleft()) else: print(-1) if oper == 'size': print(len(queue)) if oper == 'empty': if queue: print(0) else: print(1) if oper == 'front': i..
[ BOJ / 파이썬 ] 2493 탑 이 문제가 스택 유형이라는 것을 알고 있어서 쉽게 풀 수 있을 것 같다는 생각을 했다. 혼자였으면 스택이라는 것도 파악 못 할 뻔 했어서 그걸 아니까 조금 자신감이 생긴 느낌이었다. / 제출 1 / import sys input = sys.stdin.readline n = int(input()) towers = list(map(int, input().split())) result = [] while towers: current = towers.pop() remains = len(towers) while remains > 0: if towers[remains-1] >= current: break remains -= 1 result.append(remains) while result: print(result..
[ BOJ / 파이썬 ] 1874 스택 수열 / 제출 1 / import sys input = sys.stdin.readline n = int(input()) targets = [] for i in range(n): k = int(input()) targets.append(k) stack = [] t = 0 result = [] for i in range(1, n+1): stack.append(i) result.append('+') if targets[t] == i: j = len(stack) - 1 while targets[t] == stack[j]: stack.pop() result.append('-') t += 1 j = len(stack) - 1 if j < 0: break if stack: print('NO') else: for res i..