2017년 5월 1일 월요일

Project Euler - 002

Project Euler - 002(Fibonacci sequence)

사이트

문제

영문
Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
한글
피보나치 수열의 각 항은 바로 앞의 항 두 개를 더한 것이 됩니다. 1과 2로 시작하는 경우 이 수열은 아래와 같습니다.
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
짝수이면서 4백만 이하인 모든 항을 더하면 얼마가 됩니까?

풀이과정

  1. 리스트에 시작항목lst = (1,2)를 입력해 둔다.
  2. 항목을 더한 값을 저장할 변수(num)를 하나 두고 0으로 초기화 해 둔다.
  3. 400만 까지라고해서 반복문(while)을 사용한다.
  4. 리스트에서 마지막 항목을 뽑아올 수 있기 때문에 마지막 항목과 그 이전 항목을 가져와 더하면 다음 항목의 값이 생성된다.
  5. 그 생성된 수가 400만 보다 작다면 리스트에 입력하고, 400만 보다 커지면 반복문을 빠져나온다.
  6. 생성된 값에서 짝수만 더해야 하므로 다시 리스트의 값들을 2로 나누어 떨어지는 수들만 더한다.

내가 푼 답안

lst = [1,2] # 시작항목 입력 
num = 0     # 다음 항목을 계산해서 저장하기위한 변수 
while num <= 4000000:     # 400만 번 이하까지 반복한다. 
  num = lst[-1] + lst[-2] # 수열의 마지막 항목을 계산 
  if num <= 4000000:      # 계산된 수가 400만 이하일 때 리스트에 추가 
    lst.append(num)
  else:                   # 400만 이상이라면 반복문 종료 
    break
# 모든 항목에서 짝수들만의 합을 구해야 함 
s = 0
for x in lst:
  if x % 2 == 0# 2로 나누어 나머지가 0이면 짝수이다. 
    s += x
print("sum : "s)

문제를 잘못읽어 다른 방향으로 풀었던 방법

문제를 순전히 짝수 2, 4로 시작한다고 오독해서 풀었던 방법
lst = [2,4]
while lst[-1] <= 4000000:
  num = lst[-1] + lst[-2]
  if num <= 4000000:
    lst.append(num)
  else:
    break
print(lst)
print("sum : "sum(lst))
#Project_Euler #question2 #프로젝트_오일러 #python3 #Fibonacci_sequence #피보나치_수열

댓글 없음:

댓글 쓰기