inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

1. 계단오르기

계단오르기

60

rlgus4531

작성한 질문수 15

0

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 방식으로 풀었는데 그닥 좋지 않은 접근일까요...?

java 코딩-테스트

답변 2

0

김태원

안녕하세요^^

거의 모든 출제자가 dp 문제를 DFS 풀면 100% 타임리밋 나도록 문제와 테스트케이스를 설계합니다.

dp 문제는 다이나믹으로 푸는 습관을 들여야 합니다. DFS로 푸는 습관을 들였다가는

dp 문제를 봐도 DFS로 밖에 생각나지 않습니다.

0

인프런 AI 인턴

안녕하세요, 인프런 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