😁 빅데이터 문제 풀기 & Study/- BAEKJOON 문제

[1003번] 피보나치 함수 / python3 (def 없이. 또 다시 마주친 메모리초과)

또방91 2021. 11. 9. 15:15
728x90

문제 링크: https://www.acmicpc.net/problem/1003

 

1003번: 피보나치 함수

각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.

www.acmicpc.net

 !!- 추천 -!! 문제를 읽고 먼저 종이에 써서 규칙찾기


❌ 1차시도 실패

결과는 메모리 초과....... def 이용해서 하기 귀찮쓰해서 그냥 기본을 가지고 써내려갔는데, 메모리 초과가 떴다..

나름 0.25초 인것을 캐치해서 input( )과 print( )를 뻈건만.... 메모리를 생각 못함

그래도......... def 를 사용하기 싫어서 다른 방법을 생각해보았다..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 시간제한 0.25초
# 첫째줄 테스트 개수 t
# 둘째줄 0 출력 횟수, 1 출력 횟수
 
 
import sys
t= int(sys.stdin.readline())
 
fibo=[[0],[1]]
for i in range(2,41):
    fibo.append(fibo[i-1]+fibo[i-2])
    
for _ in range(t):
    num=int(sys.stdin.readline())
    # fibo[num] 속에 0과 1카운트
    sys.stdout.write(fibo[num].count(0))
    sys.stdout.write(fibo[num].count(1))
cs

❓ 정답은 ??

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 2차시도(성공)------------------------
 
import sys
t=int(sys.stdin.readline()) #테스트 개수
 
for _ in range(t):    #테스트 개수 만큼 반복
    n=int(sys.stdin.readline())    #테스트 입력받고
    # 맨 처음 0 기준으로
    zero = 1
    one = 0
    for _ in range(n):
            # 다음 수 zero는 현재one값
            # 다음 수 one은 현재zero+현재one값
        one_clone = one
        one = zero + one
        # one은 현재 바뀐상태이기에 zero = one 식을 바로 쓰면 안됨. 
        # 미리 clone을 만들어야함 (33번줄에 추가)
        
        # 다음zero 계산을 나중에 쓴 이유는, 
        # 다음one 계산 시 바뀐 zero로 들어가면 안되니까
        zero = one_clone
    print(zero, one)
cs

💯 풀이 과정

일단 0일때 zero와 one의 개수를 종이에 써봤다

# 다음 수 zero는 현재one값

# 다음 수 one은 현재zero+현재one값

 

zero와 one 2가지를 찾다보니 one이 중간에 바뀌어 버려서 clone을 만들어야 하는 수고스러움이 있었긴 했지만

그래도 def 안쓰고 문제 잘 해결함


😎오늘의 한줄평: 아직은 def 와 친하질 않아여... 😓

728x90