반응형
문제 설명 입출력 예제 풀이 코드 어느 지점에서 출발해야 최대한 많은 칸을 지날 수 있는지를 찾아야 하기 때문에 각 지점별로 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..
스프링은 프록시 방식의 AOP를 사용합니다. 스프링 AOP를 적용하면 스프링은 대상 객체 대신에 프록시를 스프링 빈으로 등록하고, 스프링은 의존관계 주입시에 항상 프록시 객체를 주입합니다. 프록시 객체가 주입되기 때문에 대상 객체를 직접 호출하는 문제는 일반적으로 발생하지 않지만 대상 객체의 내부에서 메서드 호출이 발생하면 프록시를 거치지 않고 대상 객체를 직접 호출하는 문제가 발생하게 됩니다. 어떤 문제가 발생하는지 간단한 예시를 통해 알아보겠습니다. CallService에서 external() 메서드를 호출하는데 그 안에서 CallService 자기 자신의 메서드인 internal()을 호출하는 상황 package hello.aop.internalcall.aop; ... @Slf4j @Componen..
Spring AOP를 이용하여 특정상황에 AOP를 적용할 수 있습니다. 이번 포스팅에서 설명할 내용은 다음과 같습니다. ---------------------------------------------------------- 직접 만든 @Trace 어노테이션이 붙은 메소드에 AOP 적용하기 예외가 발생했을 경우 재시도를 하는 AOP 적용하기 메소드의 실행시간이 일정 시간을 초과했을 경우 AOP 적용하기 @Trace 어노테이션이 붙은 메소드에 AOP 적용 먼저 직접 만든 @Trace 어노테이션이 붙은 메소드에 AOP 적용하는 방법을 알아 보겠습니다. 1. @Trace 어노테이션을 생성합니다. @Trace 어노테이션 package hello.aop.exam.annotation; ... @Target(Elem..
문제 설명 입출력 예제 # 입력 5 1 3 2 -1 2 4 4 -1 3 1 2 4 3 -1 4 2 4 3 3 5 6 -1 5 4 6 -1 # 출력 11 풀이 코드 이전 포스팅한 백준 1967 트리의 지름 문제와 별 차이가 없습니다. 주어진 입력값으로 그래프를 초기화하는 방법만 다를 뿐입니다. 트리의 지름을 구하는 방법은 다음과 같습니다. 1. 시작 정점에서 임의의 정점까지의 거리를 구하여 가장 먼 거리를 구합니다. 2. 1에서 찾은 가장 먼 거리를 시작 지점으로 하여 다시 한번 가장 긴 거리를 찾습니다. 정답 코드 (DFS) import sys input = sys.stdin.readline sys.setrecursionlimit(10 ** 9) V = int(input()) graph = [[] for..