티스토리 뷰

ps

BOJ 2482(색상환)풀이

KWG07(joseph0528) 2021. 2. 18. 23:07
반응형

solved.ac 티어 : 골드 4

www.acmicpc.net/problem/2482

 

2482번: 색상환

첫째 줄에 N색상환에서 어떤 인접한 두 색도 동시에 선택하지 않고 K개의 색을 고를 수 있는 경우의 수를 1,000,000,003 (10억 3) 으로 나눈 나머지를 출력한다.

www.acmicpc.net

이 문제는 코드업의 극장 좌석 배치 2를 풀고 하면 쉽게 할 수 있다.

codeup.kr/problem.php?id=2652

 

극장 좌석 배치 2

극장에 nn개의 빈 좌석이 있다.  kk명의 관객들이 영화를 보기 위해서 왔다.  이 관객들이 nn개의 좌석에 앉을 수 있는 서로 다른 방법의 수를 구하는 프로그램을 작성하시오.  (단, kk명의 사람

codeup.kr

이 문제와 색상환의 다른 점은 색상환은 양끝이 이어져있다는 것이다.

색상환은 코드업 문제에다가 한 가지 경우의 수를 빼주면 되는데 그건 바로 양끝이 선택됐을 경우이다.

색상환은 코드업 문제와는 다르게 양 끝이 만나면 안 된다. 그러므로 코드업문제에서 양끝이 모두 선택되어있고 나올 수 있는 경우의 수를 빼주면 된다. 양끝이 선택되어있고 나올 수 있는 경우의 수는 어떻게 구할 수 있을까?

 

바로 양쪽 2개를 지워주고 코드업문제 코드를 돌리면 된다. 그 이유는 양끝 값이 선택되어있다면 그 옆칸은 선택할 수 없기 때문에 양쪽으로 2개를 지워주고 k에도 -2를 해준 다음 코드를 돌리면 된다.

양쪽 2개를 없애준다면 나머지에서는 양쪽에 값이 있어도 되기 때문이다.

 

from math import factorial as t
a=int(input())
b=int(input())
if b==1:print(a)
else:
    c=a-b
    d=max(0,a-4)
    e=max(0,b-2)
    f=d-e
    r=t(max(c+1,1))//(t(b)*t(max(c+1-b,1)))
    if e==0:
        print((r-1)%1000000003)
    else:
        print((r-t(max(f+1,1))//(t(e)*t(max(f+1-e,1))))%1000000003)

 

반응형

'ps' 카테고리의 다른 글

BOJ 17386(선분 교차 1)풀이  (0) 2021.02.25
BOJ 1944(복제 로봇)풀이  (0) 2021.02.22
BOJ 20040(사이클 게임)풀이  (0) 2021.02.14
BOJ 10942(팰린드롬?)풀이  (0) 2021.02.12
BOJ 16910(mex와 쿼리)풀이  (1) 2021.02.10
댓글