티스토리 뷰
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/12914
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 문제 풀이 겸 회고
처음에는 단지 N <=2000이라고 했는데, dfs 해서 백트레킹만 잘하면 되겠지라는 생각을 하고 DFS로 구현했다..
1 1 1 1 → 1 1 2 → 1 2 1 → 2 1 1 → 2 2
if(sum==n){ // 기저조건
answer++;
return;
}
for(int i=1;i<=2;i++){
if(sum<=n){
sum+=i;
dfs(sum,n);
sum-=i;
}
}
이렇게 코드 구현했더니.
그래서 다시 문제를 보기 시작함.... 역시
1일경우
[1] → 1가지
2일 경우
[1,1], [2] → 2가지
3일 경우
[1,1,1], [1,2], [2,1] → 3가지
4일 경우
[1,1,1,1], [1,1,2], [1,2,1], [2,1,1], [2,2] → 4가지
엇? 먼가 규칙이 보이지 않는가?
2일 경우
[1,1], [2] → 2가지
3일 경우
[1,1,1], [1,2], [2,1] → 3가지
4일 경우
[2,2], [1,1,2], [1,1,1,1], [1,2,1], [2,1,1], → 5가지
그럼 5일 경우도 한번 해보면 될 것이다.. 아마... 그 예상 적중일 거임...
dp[i] = dp[i-1] + dp[i-2];
근데 또 1 1 2 3 5 .. 이거랑 위에 공식 어디서 보지 않았삼?
정답: 피보나치수열
그래서 피보나치 수열 방식으로 코드 구현하면 끗
또한, % 1234567 계산하는 거 위치 조심하세요~ 이전 값을 항상 활용한다는 점!
3. 코드
class Solution {
public long solution(int n) {
long[] dp = new long[n+1];
dp[0] = 1;
dp[1] = 1;
if(n<2) return dp[n] % 1234567;
else{
for(int i=2;i<=n;i++){
dp[i] = (dp[i-1] + dp[i-2]) % 1234567;
}
return dp[n] ;
}
}
}
피드백은 언제나 환영입니다 :) 🌳
'algo > 프로그래머스' 카테고리의 다른 글
[프로그래머스] lv2 롤케이크 자르기(JAVA) (0) | 2023.01.12 |
---|---|
[프로그래머스] lv2 할인 행사 (JAVA) (0) | 2022.11.23 |
[프로그래머스] lv2 두 큐의 합 같게 만들기 (JAVA) (2) | 2022.08.26 |
- Total
- Today
- Yesterday
- 1개 Key 여러개 Value
- level2 롤케이크 자르기
- 프로그래머스 할인행사
- 프로그래머스 롤케이크자르기
- 할인행사 자바
- 플그 멀리 뛰기
- 자바 return
- 프론트엔드
- JAVA 컬랙션
- AI캠프
- AI-WEB 교육
- 메서드형 void
- HashMap 자바
- AI교육
- IT개발캠프
- 마법사상어와 파이어볼
- 서울ICT이노베이션
- 백엔드
- JAVA 할인행사
- 18868 멀티버스 java
- 유데미
- java 마법사 상어와 파이어볼
- java 멀티버스
- NIPA
- 멀리 뛰기 자바
- 16234 마법사 상어와 파이어볼
- 멀티버스 java
- Java 멀리 뛰기
- 정보통신산업진흥원
- 백준 멀티버스 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |