오늘의 문제는 for문을 사용해서 출력하는 문제였다.
1 1 2 3 5 8 13 21 34 55 을 출력하는 문제이다.
처음 보자마자 분명히 규칙이 있을 것 같아 규칙을 찾기 시작했고
종이에 숫자를 써서 보니 앞에 두개 숫자합이 바로 다음 숫자였다.
1 + 1 = 2
1 + 2 = 3
2 + 3 = 5
....
21 + 34 =55 이렇게 보면 이해가 간다.
이때부터 1일차 문제 쓴 값을 옮겨 담아야 겠구나라고 생각이들어 총 그럼 변수가 세개가 필요하다는 감은 잡았다.
그런데 문제는 세 변수의 값을 옮기는 방법에 대해 쉽게 떠오르지 않았다.
왜냐하면 처음 출력 1,1 이라서 더욱 생각이 더오르지 않았다.
그렇게 1시간이 지나고 선생님 힌트가 나오기 시작했다.
힌트는 ㅁ 1 1 2 이다.
본 순간 1 앞에 어떤 숫자가 있다고 생각하고, 그게 0이라는 생각이 들었다.
그다음 순서는 0을 어떻게 써먹을 까요 였는데..
0 + 1 = 1
1 + 1 = 2
1 + 2 = 3
2 + 3 = 5
3 + 5 = 8
...
21 + 34= 55 이렇게 써보니, 약간 길이 보이기 시작했다.
public class Day2Test {
public static void main(String[] args) {
// 1 1 2 3 5 8 13 21 34 55 출력하기
int num1 = 0 ;
int num2 = 1 ;
int result = 0 ;
}
이렇게 변수 num1, num2, result를 선언했다.
이제 값을 옮기는 방법만 생각하면 됐다.
정말 솔직히 그냥 무언가에 홀린듯이 아래처럼 코딩 작성을 해봤다.
public class Day2Test {
public static void main(String[] args) {
// 1 1 2 3 5 8 13 21 34 55 출력하기
int num1 = 0 ;
int num2 = 1 ;
int result = 0 ;
// 0 + 1 = 1
// 1 + 1 = 2
// 1 + 2 = 3
// 2 + 3 = 5
// 3 + 5 = 8
// ...
// 21 + 34= 55
for(int i=0; i<10; i++) {
result= num1 + num2;
num1=num2;
num2=result;
System.out.println(result);
}
출력 갯수가 10개인 것은 알았기에 for문 작성은 어렵지 않았다.
num2 값이 다음 수식에서 num1값이 되어야 하기때문에 num1=num2;
로 적었고, 더한 값이 result가 num2값으로 와야해서 result=num2;
이렇게 썼다. 그리고 출력을 시도해보니, 1,2,3,5,8,13,21,34,55가 나왔고, 1이 하나 부족해서 선생님께 여쭤 보니, 출력하는 변수를 생각해보라고 알려주셔 출력 값을 디버깅해서 찾아보니 num1로 하면 원하는 출력 값이 나왔다.
**피보나치 수열 문제 핵심
1.규칙을 찾는다.
2.위의 사진 처럼 값을 옮기는 것을 절차적으로 하나씩 생각해보자
많이 아쉽다. 거의 다 풀었는데 결승선에서 누군가 도움으로 인해 도착해서ㅠㅠ
오늘 배운 것을 잊지말고 다음에 피보나치수열 개념에 문제를 만나면 무자비하게 풀어버리자 !! 가야돼 가야돼 값으 옮기는 과정에서 나는 절차 적인 생각보다는 그냥 값을 이동한다는생각으로 코드를 썼다. 내일 부터는 절차적인 개념을 생각하면서 해봐야겠다.