Algorithm 39

[Algorithm] 합이 같은 부분 집합(DFS:아마존 인터뷰)

설명 N개의 원소로 구성된 자연수 집합이 주어지면, 이 집합을 두 개의 부분집합으로 나누었을 때 두 부분집합의 원소의 합이 서로 같은 경우가 존재하면 “YES"를 출력하고, 그렇지 않으면 ”NO"를 출력하는 프로그램을 작성하세요. 둘로 나뉘는 두 부분집합은 서로소 집합이며, 두 부분집합을 합하면 입력으로 주어진 원래의 집합이 되어 합니다. 예를 들어 {1, 3, 5, 6, 7, 10}이 입력되면 {1, 3, 5, 7} = {6, 10} 으로 두 부분집합의 합이 16으로 같은 경우가 존재하는 것을 알 수 있다. 입력 첫 번째 줄에 자연수 N(1 레벨은 1 2 3 4 5 6 / sum의 인덱스는 0 1 2 3 4 5 DFS(0, 0); System.out.println(result); } } 정리 : 처음 ..

Algorithm 2021.07.12

[Algorithm] 송아지 찾기1(BFS:상태트리탐색)

설명 현수의 위치와 송아지의 위치가 수직선상의 좌표 점으로 주어지면 현수는 현재 위치에서 송아지의 위치까지 다음과 같은 방법으로 이동한다. 송아지는 움직이지 않고 제자리에 있다. 현수는 스카이 한 번의 점프로 앞으로 1, 뒤로 1, 앞으로 5를 이동할 수 있다. 최소 몇 번의 점프로 현수가 송아지의 위치까지 갈 수 있는지 구하는 프로그램을 작성하세요. 입력 첫 번째 줄에 현수의 위치 S와 송아지의 위치 E가 주어진다. 직선의 좌표 점은 1부터 10,000까지이다. 출력 점프의 최소횟수를 구한다. 답은 1이상이며 반드시 존재합니다. 풀이. public class Main { int[] arr = {1, -1, 5}; // 뻗어나갈 3가지 자식노드 Queue Q = new LinkedList(); publi..

Algorithm 2021.07.11

[Algorithm] DFS(부분집합 구하기)

설명 자연수 n이 주어지면 1부터 n까지의 원소를 갖는 집합의 부분집합을 모두 출력하는 프로그램을 작성하세요. 단, 공집합은 출력하지 않는다. 입력 3 출력 1 2 3 1 2 1 3 1 2 3 2 3 풀이. public class Main { static int n; // 입력받을 값 , 전역변수 선언 static int[] ch; // 출력해야할 값들을 체크해줄 배열 , 전역변수 선언 (1 or 0으로 비교할 것) public void DFS(int L){ if(L == n+1){ // DFS함수의 인자값 L이 입력값 n보다 크면 종료 시점은 참이된다. for(int i=0; i

Algorithm 2021.07.10

[Algorithm] 재귀함수 기본(팩토리얼, 피보나치수열)

재귀함수란 자기자신을 호출하는 함수, 반복문의 형태 아래의 DFS(int n)함수는 내부에서 자기자신을 호출하는 재귀함수이다. public void DFS(int n){ if(n==0) return; else { DFS(n-1); // 자기자신 호출 } } public static void main(String[] args) { Main T = new Main(); T.DFS(3); } retrun은 값을 반환해주는 역할이지만 void에서는 함수 종료의 의미도 갖고있다. 처음에는 if ~ else 조건으로 종료 조건을 사용하여 연습하는 것이 좋다고 한다. -> 무한루프 방지 재귀함수는 스택프레임을 사용한다. T.DFS(3)을 호출하면 호출하는 순서대로 아래의 그림처럼 스택메모리에 프레임형태로 담긴다. D..

Algorithm 2021.07.10

[Algorithm] 이분탐색(이분검색)

설명 임의의 N개의 수를 오름차순으로 정렬한 다음 M이 주어지면 이분검색으로 M이 정렬된 상태에서 몇 번째에 있는지 구하는 프로그램을 작성하세요. 단 중복값은 존재하지 않습니다. 입력 첫 줄에 한 줄에 자연수 N(3 m) { right = middle-1; middle = (left+right)/2; // middle보다 m이 크다. -> left를 우축으로 이동. }else{ left = middle+1; middle = (left+right)/2; } } System.out.println(result); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = s..

Algorithm 2021.07.07

[Algorithm] 좌표정렬(Comparable, compareTo)

설명 N개의 평면상의 좌표(x, y)가 주어지면 모든 좌표를 오름차순으로 정렬하는 프로그램을 작성하세요. 정렬기준은 먼저 x값의 의해서 정렬하고, x값이 같을 경우 y값에 의해 정렬합니다. 입력 첫째 줄에 좌표의 개수인 N(3 그외 사용자 기준 정렬 오늘은 Comparable 인터페이스의 compareTo 메서드를 오버라이드하여 풀어본다. 풀이. import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; class Point implements Comparable{ public int x, y; Point(int x, int y){ this.x = x; this.y = y; } @Override public int..

Algorithm 2021.07.07