-
[알고리즘] 프로그래머스 2단계 - 멀리 뛰기Algorithm 2024. 5. 29. 17:44
프로그래머스 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12914
문제 설명
효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는 (1칸, 1칸, 1칸, 1칸) (1칸, 2칸, 1칸) (1칸, 1칸, 2칸) (2칸, 1칸, 1칸) (2칸, 2칸) 의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다.
입출력 예제
n
4
result
5
결과적으로 시간초과와 메모리로 실패했다.
추후에 객체와 변수 선언 최소화를 하고 진행하면서 수정해야겠다.
import java.util.*;class Solution {public long solution(int n) {ArrayDeque<LinkedList<Integer>> deque = new ArrayDeque<>();// 순서보장을 위해서 링크드 리스트를 키로 설정HashMap<LinkedList<Integer>, Integer> map = new HashMap<>();// 1번 시작deque.add(new LinkedList<>(Arrays.asList(1)));// 2번으로 시작deque.add(new LinkedList<>(Arrays.asList(2)));int cnt = 0;int sum = 0;while (!deque.isEmpty()) {LinkedList<Integer> pop = deque.pop();//총 합 계산 후 카운트sum = pop.stream().mapToInt(i -> i).sum();if (sum > n) {continue;} else if (sum == n) {cnt++;}// 여기서 새로운 메모리 할당되서 메모리 오버되는 것 같다.LinkedList<Integer> addOneList = new LinkedList<>(pop);LinkedList<Integer> addTwoList = new LinkedList<>(pop);// 1번addOneList.add(1);// 2번addTwoList.add(2);// 존재 여부 체크if (map.getOrDefault(addOneList, 0) == 0) {deque.add(addOneList);map.put(addOneList, 1);}if (map.getOrDefault(addTwoList, 0) == 0) {deque.add(addTwoList);map.put(addTwoList, 1);}sum = 0;}return cnt;}}'Algorithm' 카테고리의 다른 글
[묘공단] 코딩 테스트 합격자 되기 - 백트래킹 (0) 2024.05.31 [알고리즘] 프로그래머스 2단계 - 마법의 엘리베이터 (0) 2024.05.30 [알고리즘] 프로그래머스 2단계 - 리코챗 로봇 (0) 2024.05.28 [알고리즘] 프로그래머스 2단계 - 광물캐기 (0) 2024.05.27