본문바로가기
[오일러 프로젝트] 400만 이하인 짝수 피보나치 수들의 합은 얼마일까?
수학동아 2020.05.26 02:28 조회 1835

 

코.알.못 홍 기자의 코딩 도전기

코딩의 ‘코’자도 모르는 코.알.못. 홍 기자가 수학 문제를 코딩으로 푸는 오일러 프로젝트 문제를 하나하나 해결해 나갈 예정입니다. 오일러 프로젝트는 수학과 프로그래밍 실력을 모두 키울 수 있도록 2001년에 만든 수학 문제 웹사이트입니다. 홍 기자와 함께한다면 수학과 파이썬 모두 정복할 수 있지 않을까요?

 

 

코알못에서 겨우 빠져나왔으나 알못과 잘알 사이 어딘가를 떠도는 코딩 멋쟁이 홍 기자입니다.

요즘 너무나도 수학을 잘 아는 레온하르트 오일러와 함께 코딩과 수학을 동시에 탐구하고 있죠.

그러다 이탈리아의 수학자 레오나르도 피보나치의 이름이 붙은 한 수학 개념을 만났습니다.

이번 문제도 멋지게 해결해 답을 찾을 수 있을까요?

 

 

<오일러 프로젝트 2번>

피보나치 수열은 첫 번째 값이 0, 두 번째 값이 1일 때 계속해서 앞의 두 수를 더한 값을 다음에 나열한 겁니다.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …  

피보나치 수열을 이루는 피보나치 수 중에서 짝수이면서 400만 이하인 수를 모두 더하면 얼마일까요?

 

 

피보나치 수열은 비슷한 수열을 만들어냈을 뿐 아니라 수 세기를 거쳐 수학의 발전에 영향을 끼쳤습니다. 분기별로 피보나치 수열과 관련된 수학 연구를 싣는 학술지가 있을 정도죠. 이렇게 수학에서 빠질 수 없는 피보나치 수열을 코드로 나타내고 문제의 조건에 맞는 값만 쏙쏙 골라내 합을 구해볼게요!

 

 

파이썬 완전정복! 필수 명령어

 

1. 피보나치 수열 나타내기

가장 간단한 방법은 처음 두 수를 a=0, b=1이라 하고 a, b, a+b, b+ (a+b), (a+b)+{b+(a+b)}, …의 값을 갖는 리스트를 만드는 겁니다. 하지만 피보나치 수열의 모든 값을 기억해야 한다는 단점이 있죠. 피보나치 수열에서 처음 두 수를 a, b, 두 수를 더한 값을 a+b=f라고 할 때, 다음번 피보나치 수를 구하려면 b와 f가 새로운 a, b가 돼 f를 구하는 과정을 반복합니다. 따라서 변수 a와 b, f를 사용한 반복문으로 수열을 나타낼 수 있습니다.

 

 

2. while문으로 원하는 피보나치 수 찾기

피보나치 수열에서 짝수이면서 400만 이하의 피보나치 수를 찾아서 더합니다. 단 400만 이하에 피보나치 수가 얼마나 있는지 알 수 없으므로, 특정 조건을 만족할 때까지 반복하는 while문으로 원하는 피보나치 수를 찾습니다. 새로 만들어지는 피보나치 수들은 모두 변수 b로 나타나므로, 짝수이면서 400만 이하인 b를 찾습니다.

 

 

 

TIP1. 어떤 수 n이 짝수면 2로 나눴을 때 나머지가 0이죠. 이를 나머지 연산자(%)를 써서 ‘n % 2 == 0’으로 나타낼 수 있습니다. n이 400만 이하인지는 ‘n <= 4000000’으로 표기할 수 있죠. 기본적인 연산자와 부등호만으로 필요한 조건을 표현할 수 있답니다!

 

TIP2. 처음 a, b, s의 값은 0, 1, 1이 됩니다. 코드로 쓰면 a = 0, b = 1, s = 1로 세 줄이나 차지하죠. 이 경우에는 한 줄에 a, b, s = 0, 1, 1로 나타낼 수 있습니다. 마찬가지로 f = a + b , a = b , b = f도 임시 변수였던 f를 생략해 a, b = b, a+b로 나타낼 수 있습니다. a와 b에 각각 b와 a+b를 대입한다는 의미로요.

 

 

도전! 오일러 프로젝트 2번 문제 뽀개기

* 코딩 언어는 Python으로 두고 실행하세요!

 

 

#1 피보나치 수열의 처음 두 수인 a, b와 문제에서 구할 피보나치 수의 합인 s의 초깃값을 설정합니다.

#2 피보나치 수 b가 400만 이하면 while문의 조건을 만족하므로 #3, 4 코드를 실행합니다.

#3, 4 a=0, b=1을 시작으로 피보나치 수열을 만들고 새로운 피보나치 수가 나올 때마다 짝수인지 확인합니다. 짝수라면 문제에서 구하려는 피보나치 수의 합 s에 더합니다.

#5 피보나치 수 b가 400만을 넘으면 while문에서 빠져나와 짝수이면서 400만 이하의 피보나치 수가 모두 더해진 s를 출력합니다.

 

 

Bonus! 오일러 퀴즈

 

오일러 프로젝트 2번 문제를 위 코딩창에서 풀어보고, 다음 예제 문제에도 도전해 보세요!

 

1. 홀수이면서 400만 이하인 피보나치 수의 합을 구해보자.

Hint ‘if b % 2 == 0: s = s + b’에 들어가는 수를 바꿔보세요!

 

2. a = 2, b = 1로 시작하는 뤼카 수열에서 짝수이면서 400만 이하인 수의 합을 구해보자.

Hint ‘a, b, s = 0, 1, 1’에서 변수의 초깃값을 바꿔보세요!

 

 

파이썬을 시작한지 6개월 만에 파이썬 실력이 많이 늘은 것 같죠? 후훗!

다음 오일러 프로젝트에서는 '나랃말싸미 듕귁에' 님이 추천한 문제를 풀어볼게요!

어떤 문제인지 궁금하다면 지난 오일러 프로젝트 글을 확인해보세요!

 

  •  
    매스파이 Lv.8 2020.05.26 18:44
    확인요청중

    1번 문제 10316619

    댓글 작성하기 좋아요0 댓글수3
    •  
      홍아름_기자 Lv.5 2020.06.01 18:45

       

      정답이에요~!

       

      좋아요0
    •  
      매스파이 Lv.8 2020.06.01 18:48

      c언어로 하면 잘 되겠는데 저희집 컴퓨터에 c언어 설치가 안 된데요.ㅠㅠ

      좋아요0
    •  
      홍아름_기자 Lv.5 2020.06.23 00:49

       

      어유 저런ㅠㅠ 불편하겠지만 파이썬 언어로 부탁해요ㅠㅠ

       

      좋아요0
  •  
    매스파이 Lv.8 2020.05.26 18:50
    확인요청중

    2번 문제 2435423

    댓글 작성하기 좋아요0 댓글수2
    •  
      홍아름_기자 Lv.5 2020.06.01 18:46

       

      2번 문제 답은 제가 구한 거랑 조금 다른데요? 

      코드를 어떻게 짜서 넣었는지 알려주세요! 혹시 s 값을 그대로 두진 않았나요~?

      좋아요0
    •  
      infinitepi Lv.9 2020.06.22 16:52

      저는 2435425가 나왔는데요

      혹시 오타가 나지 않았을까요?

      좋아요0
  •  
    infinitepi Lv.9 2020.06.22 16:47
    확인요청중

    1번:10316619

    댓글 작성하기 좋아요0 댓글수1
  •  
    infinitepi Lv.9 2020.06.22 16:51
    확인요청중

    2번:2435425

    댓글 작성하기 좋아요0 댓글수1
    •  
      홍아름_기자 Lv.5 2020.06.23 00:52

       

      엇 제가 구한 답이랑 조금.. 정말 조금 다르게 나왔는데요?

      혹시 a, b, s = 2, 1, ?에 s값을 무엇으로 넣었나요?

       

      좋아요0
  • 폴리매스 문제는 과학기술진흥기금 및 복권기금의 재원으로 운영되고, 과학기술정보통신부와 한국과학창의재단의 지원을 받아 수행된 성과물로 우리나라의 과학기술 발전과 사회적 가치 증진에 기여하고 있습니다.

  • ☎문의 02-6749-3911