Algorithm
Baekjoon 백준 알고리즘 - 이친수( 2193 )
jssvs
2023. 2. 18. 01:59
반응형
1.문제 소개
- DP 문제에 해당한다.
2.코드
import math
# 이친수 여부
def is_ichin(source):
result = True
offset = 1
while(offset<len(source)):
if source[offset] == '1' and source[offset-1] == '1':
result=False
break
offset +=1
return result
# 문자열 탐색 방식
def solution():
N = int(input())
S = int(math.pow(2,N))
cnt = 0
for num in range(0,S):
s = bin(num)[2:]
if len(s) == N and is_ichin(s):
cnt+=1
#print(f"num : {num}\t binary : {s} ichin : {is_ichin(s)}")
print(cnt)
ichin_array = [0,1,1,2]
def get_ichin(n):
if n < len(ichin_array):
return ichin_array[n]
else:
ichin = get_ichin(n-1)+get_ichin(n-2)
ichin_array.append(ichin)
return ichin
# DP 방식
def solution():
N = int(input())
print(get_ichin(N))
solution()
3.코멘트
- 이진수를 만들어 문자열 탐색으로 이친수를 여부를 구하는 함수를 만들어 규칙을 찾아봤다.
- 이친수는 피보나치 수열과 동일한 규칙을 갖고 있었다.
- 중복 호출을 줄이는 방식으로 DP 를 이용해 정답을 출력했다.
반응형