inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

3-G 와 테스트케이스 팁

3-G 질문있습니다.

271

최은정 ◡̎

작성한 질문수 14

0

https://www.acmicpc.net/source/74183426 정말 단순하게, 한칸 이동 혹은 2배 이동으로 뻗어나가는 재귀를 구현하였습니다.테스트 케이스는 통과했는데 시간초과가 나네요..이게 맞기는 한 코드인지 판단이 안되어 질문 남깁니다.로직이 맞는 지 한 번 검토 부탁드리겠습니다..

c++ 코딩-테스트

답변 1

0

큰돌

안녕하세요 은정님 ㅎㅎ

일단은 이 문제는 최단거리를 구하는 문제 + 경우의 수를 구하는 문제입니다.

이를 처음에 재귀 - dfs로 하는 생각자체는 괜찮습니다.

경우의 수는 모름지기 그렇게 재귀로 +해가면서 해야하거든요 ㅎㅎ

다만.. 이렇게 되면 최단거리를 구할 수는 있으나 너무나도 많은 시간이 걸리게 됩니다.

예를 들어

image

파랑색 정점을 통해 최단거리를 구했는데도.

다시 빨간생 정점들을 다시 탐색해야 합니다.

    if (s == e)
    {
        if(mnMove == cnt)
            mnCnt++;
        mnMove = min(cnt, mnMove); // 도착점에 도착했을 때 이동 횟수를 갱신
                          // 도착점에 도착한 경우 카운트
        return mnMove-1;             // 이동 횟수 반환
    }

도착 지점에서 mnMove 값 생성

 

그 후.

        cnt++;                       // 이동 횟수 증가
        int ret = solve(ns, e);      // 재귀 호출
        minMove = min(ret, minMove); // 현재 위치에서의 최소 이동 횟수 갱신
        cnt--;  

다시 탐색해 나가면서 minmove인지를 확인.

이렇게 다시 탐색해나가는 것이죠.

 

이 때문에 시간초과가 뜨는 것 같습니다.

 

참고 :

그러나 최단거리를 탐색하는 것은 무조건 깊이우선이 느릴까요?

이 경우는. 느립니다.

image

만약 bfs로 하게 되면 2번만에 찾을 것을 dfs는 여러번 탐색하게 되는 것이죠. 그러나 만약 저 파랑 정점 끝이 답이라면? bfs가 더 효율적이지 않게 됩니다.

참고 삼아 알아두시면 좋습니다. ㅎㅎ



또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


코딩살구클럽 가입부탁드립니다

0

27

2

코딩살구클럽 가입 요청 확인부탁드립니다

0

30

2

5-S 테스트 케이스 질문

0

35

2

코살 문제풀이 환경

0

48

2

2 - T 오큰수 문제가 있는 것 같습니다.

0

43

1

추천 추가문제들

0

43

2

프로그래머스 코테 환경 관련해서 질문드립니다.

0

47

2

해당 문제에 대한 채점이 코딩살구클럽에서 올바르게 처리되지 않습니다.

0

42

2

균형 이진 트리 설명 시 높이 숫자

0

31

2

4-H 질문드립니다.

0

35

2

1-K 질문드립니다.

0

41

2

대기업 인적성 시험 질문

0

41

2

4-C 질문드립니다

0

41

2

[수학숙제 / BOJ 2870] 채점 서버 오작동

0

37

1

코테 준비 질문

0

50

1

살구클럽가입 요청드려요

0

39

2

1-I 문제 질문

0

40

2

코딩살구클럽 가입

0

57

2

AI 코딩 도구 사용 시 학습 방법 조언

0

53

2

코딩살구클럽 오류

0

62

2

코살클 [3-F 괄호 추가하기] 프라이빗 9번 제보

0

46

1

코딩살구클럽 테스트 케이스 오류 제보

0

53

2

삼성 코딩테스트

0

65

2

틀린 이유를 못찾겠습니다

0

49

2