일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 10991
- 가장 짧은 문자거리
- GitHub #Commit #BaekJoon
- 자바
- 격자판
- 최대 길이
- 백준
- 모든행과열대각선의합
- ArrayList
- Two Pointer
- 인프런
- 두 배열 합치기
- 등수구하기
- 공통원소 구하기
- array
- 누적 계산
- 연속부분수열
- 보이는 학생
- 임시반장 정하기
- 10992
- 점수계산
- 큰 수 출력하기
- 아스키코드
- 뒤집은 소수
- Pointer
- java
- 투 포인터
- 배열
- 코테준비
- 알고리즘
- Today
- Total
목록[Java] 인프런 문제풀이/Recursive, Tree, Graph(DFS, BFS 기초) (11)
ezhoon

📖 문제 다음 그래프에서 1번 정점에서 각 정점으로 가는 최소 이동 간선수를 출력하세요. 1번 정점에서 각 정점으로 가는 최소 간선수를 2번 정점부터 차례대로 출력하세요. 첫째 줄에는 정점의 수 N(1

📖 문제 첫째 줄에는 정점의 수 N(1

📖 이론 무방향 그래프 방향 그래프 가중치 그래프 값이 들어갈때 1이 들어가는게 아닌 적혀져 있는 값이 들어가게 됩니다. 예) 1행 2열에는 2라는 값이 들어갑니다.

📖 문제 이진트리에서 루트 노드 1에서 말단 노드까지의 길이 중 가장 짧은 길이를 구하는 프로그램을 작성하시오. ⚠️ 주의사항 DFS, BFS 두 방법으로 다 풀어보고 어느 방법이 더 좋은지 생각해보기 ✍️ 이해 DFS /** * 1. tree 동일하게 그려주기 * 2. 최소거리 이므로 root의 lt,rt = null 일 때 return L * 3. 그 외의 경우는 Main.min 사용해서 DFS((L+1), root.lt), DFS((L+1), root.rt) 비교 후 값 return */ BFS /** * 1. tree 그려주기 * 2. Queue 생성 * 3. root 값 queue 저장 * 4. queue 값이 빌때까지 반복 * 4-1. queue.size 만큼 반복 * 4-1-1. lt,rt ..
📖 문제 첫 번째 줄에 현수의 위치 S와 송아지의 위치 E가 주어진다. 직선의 좌표 점은 1부터 10,000까지이다. 송아지는 움직이지 않고 제자리에 있다. 현수는 스카이 콩콩을 타고 가는데 한 번의 점프로 앞으로 1, 뒤로 1, 앞으로 5를 이동할 수 있다. 최소 몇 번의 점프로 현수가 송아지의 위치까지 갈 수 있는지 구하는 프로그램을 작성하세요. ⚠️ 주의사항 BFS 이해 좌표가 1 ~ 10000 존재 송아지는 움직이지 않는다. ✍️ 이해 /** * 1. 출발 지점인 s, 도착 지점 e 입력2 * 2. 1~10000 이므로 ch는 int[100001], 1,-1,5칸 배열 및 체킁요 배열 입력 * 3. Queue를 사용해서 s를 queue 추가 * 4. queue가 빈 공간이 될 때까지 반복 * 4-..

📖 문제 레벨 탐색 순회 출력 1 2 3 4 5 6 7 ⚠️ 주의사항 BFS의 풀이 방법에 대해 이해 할 것 ✍️ 이해 /** * 1. 새로운 Node 작성 * 2. Queue 생성 tree의 root 값 offer * 3. Queue의 값이 없을 때까지 반복 * 4. queue 값을 cur 이라는 변수에 저장 * 5. cur의 lt 값 rt값 비교 후 null이 아니면 offer * 6. L++ */ ✏️ 풀이 import java.util.LinkedList; import java.util.Queue; class BFS_Node { int data; BFS_Node lt, rt; // 객체 주소 저장 public BFS_Node(int val) { data = val; lt = rt = null; }..

📖 문제 첫 번째 줄부터 각 줄에 하나씩 부분집합을 아래 출력예제와 같은 순서로 출력한다. 자연수 N이 주어지면 1 ~ N까지의 원소를 갖는 집합의 부분집합을 모두 출력하시오 ⚠️ 주의사항 공집합은 출력하지 않는다. ✍️ 이해 /** * 1. DFS를 이용해서 풀기 위해 숫자가 주어지면 사용하는 것인지 아닌 것인지 판단 * 2. 임시배열 temp로 주어진 숫자가 사용하면 1 아니면 0으로 초기화 * 3. L == N + 1 * +1 인 이유는 3을 입력받았다고 했을 때 4번째까지 가서 확인해야 하기 때문 * 3-1. answer 초기화 * 3-2. 1 ~ N 까지 temp[i] == 1 즉 사용하는 칸이면 answeer += i * 3-3. 공집합은 출력하지 않으므로 length() > 0 일때면 sou..

📖 문제 이진트리를 전위순회 후위순회 중위순회로 연습해보시오 전위순회 출력 : 1 2 4 5 3 6 7 중위순회 출력 : 4 2 5 1 6 3 7 후위순회 출력 : 4 5 2 6 7 3 1 ⚠️ 주의사항 전위 후위 중위 셋 다 이해하고 출력해 볼 것 ✍️ 이해 /** * 1. lt, rt, data 로 이루어진 Node 생성 * 2. root 값이 null 이면 종료 * 3. DFS의 root.lt 호출 * 4. DFS의 root.rt 호출 * 5. 3~4 사이에 어디에 sout 해야 전위 중위 후위가 되는지 확인 * * TODO * 1. 직접 그려가며 복습하기 */ ✏️ 풀이 class Node{ int data; Node lt, rt; // 객체 주소 저장 public Node(int val) { d..

📖 문제 첫 줄에 피포나치 수열을 출력 피포나치 수열을 출력한다. 피보나치 수열이란 앞의 2개의 수를 합하여 다음 숫자가 되는 수열이다. 입력은 피보나치 수열의 총 항의 수이다. 만약 7이 입력되면 1 1 2 3 5 8 13을 출력한다. ⚠️ 주의사항 재귀함수를 이용 할 것 메모이제이션 기법을 활용해 볼 것 ✍️ 이해 /** * 1. N 입력 * 2. DFS에 N값 넘김 * 3. 1이나 2일때는 1 값 리턴 * 4. 그 외에는 N-2 + N-1 즉 N의 왼쪽 값 2개 더하기 * 4-1. 위에 내용으로 끝내도 코드는 돌아가지만 숫자가 커질 수록 너무 많은 양의 수를 재귀 * 4-2. N 번째 값이 이미 0보다 크다면 더 이상 볼 필요 없이 N 번째 값 리턴 * 5. 스택프레임 구조이므로 이전에 풀었던 fo..

📖 문제 첫 번째 줄에 N팩토리얼 값을 출력 첫 번째 줄에 자연수 N이 주어진다. ⚠️ 주의사항 DFS를 이용한 문제풀이 ✍️ 이해 /** * 1. N 입력 * 2. N이 1로 입력된 경우는 return 1 * 3. 1이 아닌경우 return N * DFS(N-1); * 3-1 N이 5라고 가정 * 3-2. 5 * D(4) * 3-3. 5 * 4 * D(3) * 3-4. 5 * 4 * 3 * D(2) * 3-5. 5 * 4 * 3 * 2 * D(1) * 3-6. 5 * 4 * 3 * 2 * 1 */ ✏️ 풀이 import java.util.Scanner; public class Main { public int DFS(int N) { if (N == 1) return 1; else return N * DF..