Programmers - 양과 늑대 with JAVA
로직 - DFS 위와 같은 상황이 있다고 가정하자. dfs의 시작은 노드번호 0부터 시작한다. 1 : 0번 방문) next = {1, 8}, 양 = 1, 늑대 = 0 2 : 0-1번 방문) next = {8, 2, 4}, 양 = 2, 늑대 = 0 3 : 0-8번 방문) next = {1, 7, 9}, 양 = 1, 늑대 = 1 -> 하지만 양과 늑대 수가 같아지므로 제외됨. 4 : 0-1-8번 방문) next = {2, 4, 7, 9} 양 = 2, 늑대 = 1 ... 즉, 방문마다 다음 방문할 노드로 해당 노드의 자식 노드들은 추가하되, 형제 노드도 추가해주면서 DFS를 돌리는 방식으로 이 문제를 해결할 수 있다. 코드 import java.util.*; class Solution { public stat..
Programmers - 외벽점검 with JAVA (V)
로직 1. DIst의 조합을 구한다. 2. 새로운 Weak 생성 - N 범위 넘어가거나 뒤로가는 경우를 묶기위함. 3. 기존의 weak의 위치에서 출발해 weak의 길이만큼 점검시 종료 예시 weak = [1, 2, 3, 4] , n = 10 new_weak = [1, 2, 3, 4, 11, 12, 13, 14] - 1부터 출발 [1, 2, 3, 4] 모두 검사 가능한지 체크 - 2부터 출발 [2, 3, 4, 11] 모두 검사 가능한지 체크 4. 친구의 수가 부족하다면 늘려서 가장 적게 친구를 사용할때가 정답 코드 import java.util.*; class Solution { public static List check = new ArrayList(); public int solution(int n,..
Programmers - 인사고과 with JAVA
로직 편하게 점수를 A, B라고 하자. 조건에서는 현재 자신의 점수보다 A, B 둘다 높은 점수가 있다면 탈락이다. 예시 : (7, 1), (6, 2), (3, 2), (3, 1), (2, 2), (2, 1) 1. A를 내림차순으로 정렬한다. -> 앞에 있을수록 A점은 뒤에보다 높다. -> 따라서 항상 B점은 앞에보다 높아야한다. A : 7, 6, 3, 3, 2, 2 B : 1, 2, 2, 1, 2, 1 -> 이렇게 된다면 (3, 2), (3, 1)과 같이 A점이 같은 경우에 (3, 1)의 경우 앞에 있는 수들과 B점을 비교해야 한다. => 현재 점수의 A점은 앞에 A보다 작거나 같고 B점은 모른다. 2. A가 같다면 B를 오름차순으로 정렬한다. A : 7, 6, 3, 3, 2, 2 B : 1, 2, 1..