본문 바로가기

CodingTest/Baekjun Online Judge

(111)
[ BOJ / 파이썬 ] 2146 다리 만들기 / 제출 1 / (소요 시간: 1시간) import sys input = sys.stdin.readline from collections import deque from copy import deepcopy n = int(input()) dx = [-1, 0, 1, 0] dy = [0, -1, 0, 1] board = [list(map(int, input().split())) for _ in range(n)] teamMin = {} def getCandidateBridge(): teamNum = 10000 + 1 q = deque([]) candidate = [] for i in range(n): for j in range(n): if board[i][j] == 1: q.append((i, j)) boa..
[ BOJ / 파이썬 ] 2573 빙산 / 제출 1 / : 35분 소요 import sys input = sys.stdin.readline from collections import deque n, m = map(int, input().split()) dx = [-1, 0, 1, 0] dy = [0, -1, 0, 1] board = [list(map(int, input().split())) for _ in range(n)] cnt = 0 def getIceBergNum(): visited = [[False] * m for _ in range(n)] result = 0 for i in range(n): for j in range(m): if board[i][j] != 0 and visited[i][j] == False: q = deque([])..
[ BOJ / 파이썬 ] 9466 텀 프로젝트 cycle문제는 정말 간만이다. 문제 이해 포인트는 마지막에 DFS 순간이 정의되는 것을 찾는건데, 그 순간은 나(x)의 타겟이 cycle안에 존재해서 걔부터 시작해서 그 뒤에 얼마나 이어졌건간에 하여간 다 팀으로 인정하고 끝내는 것. 개인적으로는 내 타겟이 방문 안 된 상태일 때 어떤 액션을 취해줘야할 지 결정을 못 내려서 문제를 해결해내지 못 했었다. 같은 과정을 타겟에게 넘겨서 진행하며 반복하면 되는 것이었다. 언젠가 방문처리된 값에 도달할 수 있는데, 이 시점에서! 팀구성 가능한지를 체크하면 되는 것이다. 나는 이걸 반대로 하려고 해서 스스로 로직이 더 꼬였었다. 다시 정리하면. DFS에서는 아래와 같은 순서로 진행된다. 1) 나(x) 방문 처리 2) 내 타겟(내가 팀 하고 싶은 학생 설정) 3)..
[ BOJ / 파이썬 ] 2206 벽 부수고 이동하기 / 제출 1 / ( 소요 시간 : 30분 ) import sys input = sys.stdin.readline from collections import deque dx = [1, 0, -1, 0] dy = [0, 1, 0, -1] n, m = map(int, input().split()) board = [] walls = [] for i in range(n): line = list(map(int, input().strip())) for j in range(m): if line[j] == 1: walls.append((i, j)) board.append(line) result = [] for wall in walls: i, j = wall board[i][j] = 0 q = deque([(0, 0)])..
[ BOJ / 파이썬 ] 2574 불 / 23분 경과 시점 첫 풀이 / ( + No제출 + 기록용 ) import sys input = sys.stdin.readline from collections import deque dx = [1, 0, -1, 0] dy = [0, 1, 0, -1] tc = int(input()) for _ in range(tc): q = deque([]) fire = deque([]) w, h = map(int, input().split()) board = [] for i in range(h): line = list(input()) for j in range(w): if line[j] == '@': line[j] = 0 q.append((i, j)) if line[j] == '*': fire.append((i, j..
[ BOJ / 파이썬 ] 7562 나이트의 이동 / 제출 1 / # 22.08.17 24분간 풀어본 망한 풀이(무한 재귀) import sys input = sys.stdin.readline from collections import deque # 8가지 dx = [-2, -1, 1, 2, -1, -1, 1, 2] dy = [1, 2, 2, 1, -1, -2, -2, -1] tc = int(input()) for i in range(tc): l = int(input()) board = [[0] * l for _ in range(l)] currentX, currentY = map(int, input().split()) targetX, targetY = map(int, input().split()) q = deque([(currentX, currentY)..
[ BOJ / 파이썬 ] 7569 토마토 보호되어 있는 글입니다.
[ 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) ..