Coding Test
-
[백준 4949번] 균형잡힌 세상Coding Test/백준 2021. 1. 4. 21:59
# 문제 내 풀이 while True: string = input() # '.'이 입력되면 종료 if string == '.': break stack = [] for s in string: # 스택에 괄호가 존재할 때, 최상단이 '('이면서 ')'이 입력이거나 최상단이 '['이면서 ']'이 입력되는 경우 if stack and ((stack[-1] == '(' and s == ')') or (stack[-1] == '[' and s == ']')): stack.pop() # 스택의 최상단 괄호를 제거 # 위 경우가 아닐 때 s가 ()[]중 하나인 경우 스택에 삽입 elif s in "([)]": stack.append(s) if stack: print("no") else: print("yes")
-
[백준 9012번] 괄호Coding Test/백준 2021. 1. 4. 21:56
# 문제 내 풀이 t = int(input()) # 테스트 케이스 개수 저장 # 각 테스트 케이스에 대하여 알고리즘 수행 for num in range(t): ps = list(input()) stack = [ps.pop(0)] # 스택을 만들어 입력의 첫번째 괄호를 담음 for p in ps: # 스택에 괄호가 존재하며, 최상단에 있는 괄호가 '('이고 새로 스택에 들어오는 괄호가 ')'라면 if stack and stack[-1] == '(' and p == ')': stack.pop() # 스택의 최상단 괄호 제거 # 다른 경우 스택에 새로운 괄호를 삽입 else: stack.append(p) # 스택에 괄호가 남아있을 경우 if stack: print("NO") # 스택이 비어 있을 경우 else..
-
[백준 1012번] 유기농 배추Coding Test/백준 2021. 1. 4. 21:51
# 문제 내 풀이 - DFS와 BFS로 모두 구현해 봄 from collections import deque # bfs를 위한 큐 생성 라이브러리 import sys sys.setrecursionlimit(10000) # 파이썬 재귀 한도를 10000으로 늘림 (기존 재귀 한도: 1000) # dfs 정의 def dfs(x, y): graph[x][y] = -1 dx = [0, -1, 0, 1] dy = [1, 0, -1, 0] for i in range(4): next_x = x + dx[i] next_y = y + dy[i] if next_x = n or next_y = m: continue if graph[next_x][next_y] == 1: ..
-
[백준 2667번] 단지번호붙이기Coding Test/백준 2021. 1. 4. 21:44
# 문제 내 풀이 1 n = int(input()) graph = [list(map(int, input())) for _ in range(n)] # dfs 정의 def dfs(x, y, cnt): if x = n or y = n: return cnt if graph[x][y] == 1: graph[x][y] = -1 cnt += 1 cnt = dfs(x - 1, y, cnt) cnt = dfs(x + 1, y, cnt) cnt = dfs(x, y - 1, cnt) cnt = dfs(x, y + 1, cnt) return cnt return cnt h_cnt = 0 # 단지 개수 h_list = [] # 각 단지의 집의 개수 for i in range(n): for j ..
-
[백준 1260번] DFS와 BFSCoding Test/백준 2021. 1. 4. 21:33
# 문제 내 풀이 from collections import deque import sys input = sys.stdin.readline # 조금 더 빠르게 입력 받기 n, m, v = map(int, input().split()) graph = [[] for _ in range(n + 1)] for i in range(m): n1, n2 = map(int, input().split()) graph[n1].append(n2) graph[n2].append(n1) # graph의 각각 노드에 대하여 인접한 노드 정보를 오름차순으로 정렬 for i in range(n + 1): graph[i].sort() dfs_visited = [False] * (n + 1) # dfs 방문 정보를 담을 배열 생성 bf..
-
[프로그래머스 42747번] H-IndexCoding Test/프로그래머스 2020. 12. 23. 00:12
# 문제 내 풀이 def solution(citations): answer = 0 citations.sort() n = len(citations) cnt = 1 # 뒤에서부터 h번 이상 인용된 논문이 h편 이상이 되는 위치 찾기 for i in range(n - 1, -1, -1): if citations[i] < cnt: answer = cnt - 1 break cnt += 1 # h의 최댓값이 모든 논문의 개수일 경우 if len(citations) == cnt - 1: answer = cnt - 1 return answer 지향할 답안 def solution(citations): citations = sorted(citations) l = len(citations) for i in range(l):..
-
[프로그래머스 42842번] 카펫Coding Test/프로그래머스 2020. 12. 21. 19:38
# 문제 내 풀이 - 시간초과로 문제 풀이 실패, 수정 답안 # 관계식을 구해 이차방정식으로 정리한 다음 근의 공식 사용 def solution(brown, yellow): term = (((brown + 4) / 2) ** 2 - 4 * (brown + yellow)) ** 0.5 w = ((brown + 4) / 2 + term) / 2 h = ((brown + 4) / 2 - term) / 2 return [w,h] 문제점 문제의 조건을 꼼꼼히 보면 조건식 2개로 2차 방정식을 만들어 문제를 해결할 수 있었다. 조건식을 꼼꼼히 보고 수학적 방향의 풀이도 생각해보자.