문제 설명 입력과 출력 입출력 예제 풀이 코드 풀이 핵심 벽의 개수가 3개를 설치한 모든 2차원 배열(경우의 수)를 구한다. 3개의 벽이 설치된 2차원 배열마다 bfs()로 탐색하여 가장 큰 안전지대 개수로 갱신한다. 정답 코드 pypy3로 제출하여야 시간초과 없이 통과 from collections import deque import sys import copy input = sys.stdin.readline n, m = map(int, input().split()) # 행, 열 virus_map = [list(map(int, input().split())) for _ in range(n)] result = 0 dx = [1, -1, 0, 0] dy = [0, 0, -1, 1] # 백트래킹으로 3개의 ..
문제 설명 입출력 예제 풀이 코드 처음에는 시작지점의 인덱스 값을 bfs(x, y) 이런식으로 넘겨 탐색하도록 했지만 "예제 입력3"번 케이스에서만 계속 전혀 다른값이 나왔다. 이유는 다음과 같았다. field[x][y]의 값이 1일 때 bfs(x,y)를 시작해 한칸씩 이동하는데, 예제 입력3번 케이스는 시작점이 2개이기 때문에 첫 번째 시작지점 탐색을 시작 할 때 field의 값을 +1씩 추가하고, 또 두번 째 시작지점에서도 bfs(x,y)를 시작해 field의 값을 +1 씩 추가하게 되어서 발생하는 문제였다. 이 부분을 해결하기 위해서는 queue의 특징을 이용해서 걍 시작점마다 한번씩 벌어가면서 탐색하도록 해야하는데 그러기 위해서는 시작점에 해당할 경우 먼저 queue에 시작점을 다 추가해놓고, 그..
개발환경과 운영환경의 설정 분리 하나의 애플리케이션을 여러 다른 환경에서 사용해야 할 때가 있다. 예를 들어 개발환경과 운영환경이 필요할 경우 어플리케이션이 개발환경 DB에 접근하는 설정 정보와, 운영환경 DB에 접근하는 설정 정보가 다르다. 이를 해결 하기 위한 방법으로 하나의 내부 설정 파일 "application.properties"에서 스프링이 지원하는 "프로필"으로 각 환경 별 설정을 작성하여 관리 할 수 있다. application.properties spring.config.activate.on-profile=dev url=dev.db.com my_username=dev_user password=dev_pw #--- spring.config.activate.on-profile=prod url..
문제 설명 입출력 예제 풀이 코드 어느 지점에서 출발해야 최대한 많은 칸을 지날 수 있는지를 찾아야 하기 때문에 각 지점별로 dfs로 재귀적으로 탐색하며 해당 위치에서 얼만큼 이동할 수 있는가를 dp에 저장한다. 답은 최대한 많은 칸을 이동해야하므로 가장 많은 칸을 이동할 수 있는 칸수를 dp에 저장된 값을 통해 반환한다. 정답 코드 import sys sys.setrecursionlimit(10 ** 8) input = sys.stdin.readline n = int(input()) forest = [list(map(int, input().split())) for _ in range(n)] dx = [1, -1, 0, 0] dy = [0, 0, -1, 1] def dfs(x, y): if dp[x][y..
문제 설명 입출력 예제 풀이 코드 위 예시를 그림으로 표현하면 다음과 같다. 4, 6, 7은 하나의 프로젝트 팀, 싸이클을 이루고, 3은 자기 자신을 선택해 자기 자신만 프로젝트 팀에 속한다. 총 학생의 수는 7명이므로 프로젝트 팀을 이루고 있는 (3) 그룹과 (4, 6, 7)을 빼면 어느 프로젝트 팀에도 속하지 않는 학생 수는 3이 된다. 정답 코드 import sys sys.setrecursionlimit(10 ** 8) input = sys.stdin.readline def dfs(start): global cnt visited[start] = True route.append(start) next = graph[start] if visited[next]: # 사이클이 되는 팀을 뺌 if next i..
문제 설명 입력과 출력 입출력 예제 # 입력 5 -1 0 0 1 1 2 # 출력 2 풀이 코드 정답 코드 import sys input = sys.stdin.readline n = int(input()) tree = list(map(int, input().split())) delete = int(input()) def dfs(del_node): tree[del_node] = -10 # 의미없는 숫자를 부여해 제거함을 의미 for i in range(n): if del_node == tree[i]: # tree[i]가 del_node의 자식이면 재귀를 통해 삭제 dfs(i) dfs(delete) cnt = 0 for i in range(n): if tree[i] != -10 and i not in tree..