console.log
[PRG] 12900 2 x n 타일링 JAVA 본문
https://school.programmers.co.kr/learn/courses/30/lessons/12900
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
메모리: 54.7 MB
실행시간: 9.43 ms
문제분석
3 x n 타일링과 똑같은 문제 !!
규칙만 업데이트하면 된다 😎
걸린시간
20분 ⏱️
풀이방법
https://yeahzzz.tistory.com/95
[PRG] 12902 3 x n 타일링 JAVA
https://school.programmers.co.kr/learn/courses/30/lessons/12902 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는
yeahzzz.tistory.com
위 링크를 타고 가시면 자세한 풀이 방법이 나와있습니다 ㅎㅎ
여기서는 좀 더 단순화 시킬 필요가 있다
왜냐면... 효율 테스트가 꽤나 까다롭다 ^^... n범위가 보다 넓어졌기 때문에 ....
이번에는 00 01 10 11 을 비트연산 했을 때
전부 XOR만 유효하고, 00과 00만 예외적으로 유효하다는 규칙을 발견할 수 있었다 !
결국 인덱스로 봤을 때,
0 - 0, 0 - 3, 1 - 2 이렇게 서로 유효하다.
하지만, 첫 행에서 1, 2는 유효하지 않기 때문에 결국 끝까지 유효하지 않게 된다.
따라서, 0과 3인덱스만 연산해준다 !
위 조건에 따라 DP연산 해주면 된다 !
포인트
형변환을 잘해야 합니다 ^~^
큰 수는 잊지 말고 long 사용하기 ~~~~~~ 🥲
코드
※ 너무 간단한 코드라 주석은 따로 달지 않았습니다 !
class Solution {
public int solution(int n) {
long[][] map = new long[n][4];
map[0][0] = map[0][3] = 1;
for(int row = 0; row < n - 1; row ++) {
map[row + 1][0] += (map[row][3] + map[row][0]) % 1000000007L;
map[row + 1][3] += map[row][0] % 1000000007L;
}
return (int) (map[n - 1][0] % 1000000007L);
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[PRG] 131701 연속 부분 수열 합의 개수 JAVA (0) | 2023.10.01 |
---|---|
[PRG] 12902 3 x n 타일링 JAVA (0) | 2023.09.27 |
[PRG] 135807 숫자 카드 나누기 JAVA (1) | 2023.09.25 |
[PRG] 138476 귤 고르기 JAVA (0) | 2023.09.17 |
[PRG] 142085 디펜스 게임 JAVA (0) | 2023.09.15 |