heheh
히히
heheh
전체 방문자
오늘
어제
  • 히히 (75)
    • AI (14)
      • Model (Study) (3)
      • Model (Paper) (7)
      • Tip! (4)
    • Backend (3)
      • ASP.NET (1)
      • Spring (2)
      • program (0)
      • JAVA (0)
    • Program (11)
      • Docker (3)
      • Github (5)
      • AWS (3)
    • OS (1)
      • Window (1)
      • Linux (0)
    • Python (14)
      • Python Lib (11)
      • Pytorch (1)
      • Tensorflow (1)
      • 크롤링 (1)
    • Spark (3)
      • Scala (2)
      • Pyspark (0)
      • SQL (1)
    • IOS (Swift) (0)
      • 기본 개념 (0)
    • 프로젝트 (3)
      • [AI] GAN (0)
      • [IOS] Swift (3)
      • [AI] 추천시스템 (0)
    • 분석 (1)
    • 알고리즘 풀이 (22)
      • 백준 (22)
    • 기타 (3)
      • 장비세팅 (3)
      • 소개 (0)

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
heheh

히히

알고리즘 풀이/백준

백준 2193번 : 이친수 (Python)

2021. 2. 16. 01:19

문제 : www.acmicpc.net/problem/2193

 

2193번: 이친수

0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않

www.acmicpc.net

 

풀이

맨앞의 수는 무조건 1이다. 그 다음부터는 1이 연속 두번 이상 나오는 경우를 제외해야 하므로 남은 자리에 수를 대입할 때 1과 0을 대입하지 않고 01과 0을 대입하는 것으로 계산한다.

 

01은 자리를 한번에 두개씩 차지하므로 01이 들어가는 만큼 빈자리의 수를 줄이고 조합으로 해결한다. 우선 맨 앞자리 수는 고정이므로 빈자리의 수 n-1을 k에 저장한다. 01이 들어가는 수 만큼 반복문을 사용하여 result에 더한다. i는 01의 개수이며 최대 k//2개까지 대입될 수 있다. 01의 개수(i)만큼 빈자리가 줄어드므로 k-i를 빈자리의 값으로 계산한 뒤 a에 저장한다. a~i까지 곱한 값에 i~1까지 곱한 값을 나누면 빈자리에 01을 대입하는 경우의 수가 된다.

계산시 곱해지는 값은 미리 dp에 저장해둔다.

 

 

n = int(input())

dp = [1, 1]
for i in range(2,n):
    dp.append(i*dp[i-1])


if n==1 or n==2:
    result = 1

else:
    result = 1
    k = n-1

    for i in range(1,k//2+1):
    	a = k-i
        result += (dp[a] // dp[a-i])// dp[i]

print(result)

'알고리즘 풀이 > 백준' 카테고리의 다른 글

백준 1149번 : RGB거리 (Python)  (0) 2021.03.03
백준 14501번 : 퇴사 (Python)  (0) 2021.02.08
백준 11712번 : 2×n 타일링 2 (Python)  (0) 2021.02.07
백준 1010번 : 다리 놓기 (Python)  (0) 2021.02.06
백준 9461번 : 파도반 수열 (Python)  (0) 2021.02.06
    heheh
    heheh

    티스토리툴바