99클럽 코테 스터디 22일차 TIL - 산 모양 타일링(프로그래머스 #258705)

2024. 11. 18. 12:55·99클럽 코테 스터디

❇️오늘의 학습 키워드 : 산 모양 타일링(프로그래머스 #258705)

문제 설명

한 변의 길이가 1인 정삼각형 2n+1개를 이어붙여 윗변의 길이가 n, 아랫변의 길이가 n+1인 사다리꼴을 만들 수 있습니다. 이때 사다리꼴의 윗변과 변을 공유하는 n개의 정삼각형 중 일부의 위쪽에 같은 크기의 정삼각형을 붙여 새로운 모양을 만들었습니다. 예를 들어 n이 4이고, 1번째, 2번째, 4번째 정삼각형 위에 정삼각형을 붙인 모양은 다음과 같습니다.

이렇게 만든 모양을 정삼각형 타일 또는 정삼각형 2개를 이어 붙인 마름모 타일로 빈 곳이 없도록 채우려고 합니다. 정삼각형 타일과 마름모 타일은 돌려서 사용할 수 있습니다.

타일을 놓을 때 다른 타일과 겹치거나 모양을 벗어나게 놓을 수는 없습니다. 위의 예시 모양을 채우는 방법 중 일부는 다음과 같습니다.

사다리꼴의 윗변의 길이를 나타내는 정수 n과 사다리꼴 윗변에 붙인 정삼각형을 나타내는 1차원 정수 배열 tops가 매개변수로 주어집니다. 이때 문제 설명에 따라 만든 모양을 정삼각형 또는 마름모 타일로 빈 곳이 없도록 채우는 경우의 수를 10007로 나눈 나머지를 return 하도록 solution 함수를 완성해 주세요.


제한사항
  • 1 ≤ n ≤ 100,000
  • tops의 길이 = n
    • tops[i]는 사다리꼴의 윗변과 변을 공유하는 i+1번째 정삼각형의 위쪽에 정삼각형을 붙이는 경우 1, 붙이지 않는 경우 0입니다.

입출력 예
   n                        tops                                                                                                                          result
4 [1, 1, 0, 1] 149
2 [0, 1] 11
10 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 7704

입출력 예 설명

입출력 예 #1

문제의 예시와 같습니다. 문제에서 설명한 방법을 포함해 총 149가지 방법이 존재합니다.

따라서 149를 return 해야 합니다.

입출력 예 #2

문제 설명에 따라 만든 모양은 다음과 같습니다.

이 모양을 타일로 채우는 방법은 다음과 같이 총 11가지입니다.

따라서 11을 return 해야 합니다.

입출력 예 #3

경우의 수는 총 17,711가지입니다. 따라서 17711을 10007로 나눈 나머지인 7704를 return 해야 합니다.

정답 코드(블로그 참고)

def solution(n, tops):
    MOD = 10007
    dp1 = [0] * n
    dp2 = [0] * n
    dp1[0] = 1
    dp2[0] = 2 + tops[0]
    
    for i in range(1, n):
        dp1[i] = (dp1[i - 1] + dp2[i - 1]) % MOD # 오른쪽 밑을 채우는 경우
        dp2[i] = ((dp1[i - 1] * (1 + tops[i])) + (dp2[i - 1] * (2 + tops[i]))) % MOD # 채우지 않는 경우 
        
    return (dp1[-1] + dp2[-1]) % MOD

❇️오늘의 회고

  - 오른쪽 밑을 채우는 경우와 안 채우는 경우로 나눠 두 경우의 수를 더하는 것이 관건이었다.

  - 풀이보자마자 이마를 탁 치게 되는 게 바로 이 dp 점화식 유형인 것 같다... 많이 풀어보면서 감을 익히자!

  - 내일 11시, 문제를 풀기 전에 위 문제를 한번 더 복습하고 내일 문제에 사용된 알고리즘에 대해서 공부할 것이다!🙂

저작자표시 (새창열림)

'99클럽 코테 스터디' 카테고리의 다른 글

99클럽 코테 스터디 24일차 TIL - 저울(백준 #2437)  (2) 2024.11.20
99클럽 코테 스터디 23일차 TIL - 치킨 배달(백준 #15686)  (1) 2024.11.19
99클럽 코테 스터디 21일차 TIL - 우주 탐사선(백준 #17182)  (2) 2024.11.17
99클럽 코테 스터디 20일차 TIL - 소트(백준 #1083)  (0) 2024.11.16
99클럽 코테 스터디 19일차 TIL - 소용돌이 예쁘게 출력하기(백준 #1022)  (3) 2024.11.15
'99클럽 코테 스터디' 카테고리의 다른 글
  • 99클럽 코테 스터디 24일차 TIL - 저울(백준 #2437)
  • 99클럽 코테 스터디 23일차 TIL - 치킨 배달(백준 #15686)
  • 99클럽 코테 스터디 21일차 TIL - 우주 탐사선(백준 #17182)
  • 99클럽 코테 스터디 20일차 TIL - 소트(백준 #1083)
버그잡는고양이발
버그잡는고양이발
주니어 개발자입니다!
  • 버그잡는고양이발
    지극히평범한개발블로그
    버그잡는고양이발
  • 전체
    오늘
    어제
    • 분류 전체보기 (383) N
      • React (16)
      • Next.js (5)
      • Javascript (5)
      • Typescript (4)
      • Node.js (2)
      • Cs (16)
      • 트러블 슈팅&리팩토링 (6) N
      • Html (1)
      • Css (3)
      • Django (0)
      • vue (0)
      • Java (2)
      • Python (0)
      • 독서 (1)
      • 기타 (3)
      • 백준 (192)
      • swea (31)
      • 프로그래머스 (30)
      • 이코테 (4)
      • 99클럽 코테 스터디 (30)
      • ssafy (31)
      • IT기사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 태그

    개발자취업
    Til
    코딩테스트준비
    99클럽
    항해99
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
버그잡는고양이발
99클럽 코테 스터디 22일차 TIL - 산 모양 타일링(프로그래머스 #258705)
상단으로

티스토리툴바