계단오르기
60
작성한 질문수 15
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int cnt = 0;
public static void dfs(int sum, int n) {
int[] arr = {1, 2};
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
if (sum == n) {
cnt++;
sum -= arr[i];
} else {
if (sum < n) dfs(sum, n);
sum -= arr[i];
}
}
}
public static void main(String[] args) throws Exception {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bufferedReader.readLine());
dfs(0, n);
System.out.println(cnt);
}
}dp를 잘 몰라서 자력으로 dfs 방식으로 풀었는데 그닥 좋지 않은 접근일까요...?
답변 2
0
안녕하세요^^
거의 모든 출제자가 dp 문제를 DFS 풀면 100% 타임리밋 나도록 문제와 테스트케이스를 설계합니다.
dp 문제는 다이나믹으로 푸는 습관을 들여야 합니다. DFS로 푸는 습관을 들였다가는
dp 문제를 봐도 DFS로 밖에 생각나지 않습니다.
0
안녕하세요, 인프런 AI 인턴입니다.
계단 오르기 문제를 DFS(Depth First Search)로 풀이하는 것은 가능합니다. 그러나, 이 방법은 계산량이 많아질 수 있는 문제를 가지고 있습니다. DFS 방식으로 모든 가능한 경로를 탐색하려다 보니, 계단 수가 커질수록 시간 복잡도가 기하급수적으로 증가할 수 있습니다. 따라서, DFS는 작은 입력에 대해선 잘 작동하지만, 큰 입력에서는 비효율적일 수 있습니다.
계단 오르기 문제는 일반적으로 동적 프로그래밍(DP) 기법을 사용하여 해결하는 것이 효율적입니다. DP를 사용하면 이전 계산된 결과를 활용하여 중복 계산을 줄일 수 있습니다. 이를 통해 시간 복잡도를 많이 개선할 수 있습니다.
관련 질문 URL:
- 계단오르기 질문
- 이 질문에서는 DFS로 문제를 해결했을 때의 한계점에 대해 논의하고 있으며, 계단의 수가 많아질수록 시간초과 문제가 발생할 수 있음을 다루고 있습니다.
지속적으로 동적 프로그래밍 기법을 연구해보는 것도 좋은 접근입니다. 필요시 DP에 대한 기초와 응용을 다룬 자료를 학습하시면 문제를 해결하는 데 많은 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.
0
33
1
갑자기 채점 사이트가 바뀌었어요
0
34
1
문제 리스트 페이지
0
29
1
채점 사이트 관련 질문드립니다
0
24
1
봉우리 문제 질문입니다
0
84
2
씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?
0
65
0
이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?
0
72
0
가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법
0
67
1
좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ
0
85
2
6-7 강의에서
0
48
1
6-6. 장난꾸러기 질문 있습니다.
0
46
1
강의 수강후 코딩테스트
0
111
1
answer 변수 사용 여부
0
46
1
2중 for문
1
85
2
2-11. 임시반장정하기 (Runtime Error)
0
63
1
혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?
0
70
1
이런 풀이는 어떨까요
0
44
1
자바 스트림 방식의 효율성 질문 드립니다.
0
57
1
알고리즘 자료 구조들..
0
63
1
StringBuilder vs BufferdWriter
0
48
1
원더랜드(프림)
0
50
1
이런 코드는 어떤가요?
0
61
1
bfs 풀이
0
57
1
병합정렬
0
57
1





