[백준/python] 11726 2xn 타일링

2024. 3. 24. 22:16· Koala - 14기/코딩테스트 준비 스터디
목차
  1. 문제
  2. 코드
  3. 풀이

https://www.acmicpc.net/problem/11726

 

11726번: 2×n 타일링

2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.

www.acmicpc.net

문제

 

코드

from functools import reduce

def in_cache(func): # decorator를 사용 - 메모이제이션
    cache = {}
    def wrapper(n):
        if n in cache:
            return cache[n]
        else:
            cache[n] = func(n)
            return cache[n]
    return wrapper

@in_cache
def factorial_reduce(n): # reduce 함수를 이용한 팩토리얼 함수
    if n==0: return 1
    return reduce(lambda x, y: x * y, range(1, n+1))

n = int(input())

two = n//2
ans = 0
for i in range(two+1):
    one = n - 2*i
    ans += factorial_reduce(i+one)//(factorial_reduce(i)*factorial_reduce(one))
   
print(ans%10007)

풀이

어떤 모양으로 할지는 블럭을 세로로 둘지 가로로 둘지에 결정된다. 따라서 입력받은 n을 1칸 또는 2칸으로 잘 나눠갖는 경우의 수를 세어보면 된다. 팩토리얼을 사용해야하는데 같은 수를 여러번 계산할 수 있으니 캐시를 이용하자.

처음엔 팩토리얼 내장 함수가 있을 것 같아 찾아봤는데, 아래와 같은 블로그를 발견했다. 내장함수인 reduce를 이용하여 람다 함수를 만드는 코드가 새롭고 써보고 싶어서 가져왔다. 또, 캐시를 데코레이터를 이용하여 코드를 분리하는 것도 시도해보고 싶어서 가져왔다.

이제 블럭 1개 또는 2개의 개수를 달리하여 계산한다. 같은 종류가 존재할 때의 순열 공식을 사용했다.

다 쓰고 돌려보니 196ms 시간이 걸렸다. 다른 분들의 코드를 보니 오히려 한번에 모든 팩토리얼을 계산하고 (1000밖에 없으므로...!) 바로 가져다 쓰는 편이 훨씬 빨랐다. 아니면 그냥 1부터 시작해서 아예 dp로 푸는 것이 나은 듯

 

참고

https://shoark7.github.io/programming/algorithm/several-ways-to-solve-factorial-in-python

저작자표시 (새창열림)

'Koala - 14기 > 코딩테스트 준비 스터디' 카테고리의 다른 글

[백준/python] 백준 자원캐기  (0) 2024.03.24
[백준/C++] 8979 올림픽  (0) 2024.03.24
[백준/python] 11047 동전0  (0) 2024.03.24
[백준/Python] 5557 - 1학년  (0) 2024.03.24
[백준/c++] 2579번 계단 오르기  (0) 2024.03.24
  1. 문제
  2. 코드
  3. 풀이
'Koala - 14기/코딩테스트 준비 스터디' 카테고리의 다른 글
  • [백준/python] 백준 자원캐기
  • [백준/C++] 8979 올림픽
  • [백준/python] 11047 동전0
  • [백준/Python] 5557 - 1학년
KauKoala
KauKoala
항공대 알고리즘 동아리 Koala 🥰
KauKoala
Koala
KauKoala
전체
오늘
어제
  • 분류 전체보기 (1887)
    • 공지 게시판 (10)
    • 정보 게시판 (8)
    • Codeforce (15)
    • acm-icpc (6)
    • Koala - 1기 (16)
    • Koala - 2기 (111)
      • Programming Contest (1)
      • A반 (20)
      • B반 (39)
      • C반 (22)
      • 기초 강의 (18)
    • Koala - 3기 (10)
      • 기초 스터디 (7)
    • Koala - 4기 (67)
    • Koala - 5기 (144)
      • 기초 알고리즘 스터디 (75)
      • 코딩테스트 준비 스터디 (68)
    • Koala - 6기 (102)
      • 기초 알고리즘 스터디 (75)
      • 코딩테스트 준비 스터디 (25)
      • 모의 테스트 스터디 (1)
    • Koala - 7기 (167)
      • 기초 알고리즘 스터디 (97)
      • 코딩테스트 준비 스터디 (68)
      • 모의 테스트 스터디 (1)
    • Koala - 8기 (44)
      • 기초 알고리즘 스터디 (32)
      • 코딩테스트 준비 스터디 (10)
      • 코드포스 버츄얼 스터디 (0)
      • 프로그래머스 LV2 스터디 (0)
    • Koala - 9기 (205)
      • 기초 알고리즘 스터디 (138)
      • 코딩테스트 준비 스터디 (64)
      • 모의테스트 준비 스터디 (1)
    • Koala - 10기 (117)
      • 기초 알고리즘 스터디 (30)
      • 코딩테스트 준비 스터디 (86)
      • 모의테스트 준비 스터디 (1)
    • Koala - 11기 (151)
      • 기초 알고리즘 스터디 (46)
      • 코딩테스트 준비 스터디 (104)
      • 모의테스트 준비 스터디 (1)
    • Koala - 12기 (86)
      • 기초 알고리즘 스터디 (31)
      • 코딩테스트 준비 스터디 (55)
    • Koala - 13기 (119)
      • 기초 알고리즘 스터디 (52)
      • 코딩테스트 준비 스터디 (67)
    • Koala - 14기 (116)
      • 기초 알고리즘 스터디 (39)
      • 코딩테스트 준비 스터디 (77)
    • Koala - 15기 (138)
      • 기초 알고리즘 스터디 (73)
      • 코딩테스트 준비 스터디 (65)
    • Koala - 16기 (47)
      • 코딩테스트 기초 스터디 (16)
      • 코딩테스트 심화 스터디 (31)
    • Koala - 17기 (62)
      • 코딩테스트 기초 스터디 (15)
      • 코딩테스트 심화 스터디 (47)
    • Koala - 18기 (31)
      • 코딩테스트 기초 스터디 (11)
      • 코딩테스트 심화 스터디 (20)
    • Koala - 19기 (41)
      • 코딩테스트 기초 스터디 (7)
      • 코딩테스트 심화 스터디 (34)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 🐨항공대 알고리즘 학회 Koala 3기 모집
  • 🐨항공대 알고리즘 학회 Koala 2기 모집
  • 소모임 소개

인기 글

태그

  • dp
  • BOJ
  • 백트래킹
  • dfs
  • C++
  • 백준
  • BFS
  • 파이썬

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.3.0
KauKoala
[백준/python] 11726 2xn 타일링
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.