ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 피보나치수 출력 프로그램 만들기(배열, while 반복문)
    취미/코딩 2023. 9. 17. 19:06

    서문

    최근 자바를 배우고 있다. 언젠가 HTML과 CSS를 조금 배웠던 적이 있었는데, 안드로이드 애플리케이션을 만들어 보고 싶어서 자바를 시작했다.
    생활코딩의 자바 입문수업을 들었다(https://opentutorials.org/course/1223). 유튜브와 홈페이지 강의를 병행하며 1회독을 끝냈고, 실습을 통해 내 것으로 만들고자 연습을 시작했다.

    실습시작

    bing의 GPT4.0에 배열을 연습할 수 있는 기초 프로그램 예제를 알려달라고 했다. 검색결과 피보나치수열 만드는 프로그램이 있었다.

    제목만 본 상태로, 구상하고 한 번 만들어보려고 한다.(참고한 페이지: https://m.blog.naver.com/wldks79/222143745634)

    Java 기본 예제 1- 피보나치 수열 출력하기 (배열과 for문)

    #java #java예제 #코딩테스트 #java코딩 #피보나치수열 #배열 #ArrayList #제네릭 #for문 Java 기본 예...

    blog.naver.com


    구상

    - 피보나치수열: 1-1-2-3-5-8-13... 중 요청한 순번의 값이 나와야 함
    - ((결과)) 몇 번째 값을 출력할 건지 입력 > 해당 순서의 값이 출력됨
    - 처음 1-1은 고정이다. 배열의 0번, 1번은 1, 1로 고정시킴
    - 배열의 2번부터는 앞의 두 개를 더해서 출력 > 이전 값 2개를 호출해서 더한 뒤 입력시켜야 함 > 이 부분을 반복문으로 하여 배열을 만들고 출력하기

    구체화

    - int i 값을 입력값으로 받음(Scanner)
    - 피보나치수열을 담을 배열 array를 만든다. `int[] fbnc = new int[i];`
    - 기본값 두 개는 직접 입력해야 함. `fbnc[0] = 1; fbnc[1] = 1;`
    - 입력값 i-1 번째 배열값을 출력해야 함
    - 입력값이 1이나 2면 계산할 거 없이 출력하면 됨. `if(i=1 || i=2){sout(fbnc[i])}`
    - 입력값이 3 이상이면 계산을 해서 fbnc배열을 만들어 줘야 함. 배열을 만드는 산식을 만들어야 함.
    - 숫자 i를 받으면, 일단 배열을 위해 index라는 변수를 하나 만들자. 헷갈리니까. int index = i-1; 지금부터 i 는 신경안쓰고, 배열의 몇 번째 값을 꺼낼지만 생각하면 된다. fbnc[index] = fbnc[index-1] + fbnc[index-2] 이다.
    - 끝이네? 이렇게 해서 출력하면 되는 거 같은데?
    + 배열은 while 문을 이용하여 만들 수 있음.

    1차 작성

    public class fbncDemo {
    	public static void main(String[] agrs){
    		System.out.println("몇 번째 피보나치 수열을 원하시나요? \n 정수형태로 써 주십시오.")
    		int request = int Scanner(System.in);
    		int[] fbnc = new int[request];
    		int fbnc[0] = 1;
    		int fbnc[1] = 1;
    		int result = 0
    
    		if(request <= 2){
    			result = 1;
    		} else {
    			int i = 2;
    			while(i < request){
    				int fbnc[i] = fbnc[i-1] + fbnc[i-2];
    				result = fbnc[i];
    				i++;
    			}
    		}
    		System.out.println(result);
    	}
    }

    >> 1차 작성 이후 온라인 컴파일러로 돌려보고, 오류를 수정하였다.
    - i 대신 request를 넣어서 식별을 용이하게 했다.
    - index 변수를 만드는 게 더 헷갈릴 듯 하여 입력값인 request 변수 하나만 사용하였다.

    2차 작성 = 성공!!

    import java.util.Scanner;
    
    public class Main{
    	public static void main(String[] args) {
    	    Scanner sc = new Scanner(System.in);
    		System.out.println("몇 번째 피보나치 수열을 원하시나요? \n (정수로 써 주십시오)");
    		int request = sc.nextInt();
    		int[] fbnc = new int[request];
    		fbnc[0] = 1;
    		fbnc[1] = 1;
    		int result = 0;
    
    		if(request <= 2){
    			result = 1;
    		} else {
    			int i = 2;
    			while(i < request){
    				fbnc[i] = fbnc[i-1] + fbnc[i-2];
    				result = fbnc[i];
    				i++;
    			}
    		}
    		System.out.println(result);
    	}
    }

    수정한 부분

    - 세미콜론 빼먹은 게 많음
    - 스캐너의 올바른 사용법을 몰랐음
    - 배열에 숫자를 입력하고 출력하는 정확한 방법을 몰랐음

    결과

    참고 블로그의 코드 리뷰

    다른 사람이 어떻게 했는지 보고 올까?
    (처음에는 답지를 한 번 볼까?라고 썼었는데... 내 코드도 답지가 되어버렸잖아? 후훗)
    - 서로 생각한 프로그램이 달랐다. 나는 n번째 값을 가지고 오는 코드를 만든 반면, 저 사람은 n번째까지의 피보나치 수열이 출력되도록 프로그램을 만들었다.
    - 프로그램 실행과 종료에 대한 질문이 들어있고, while 문을 넣어서 원하는 만큼('n'을 칠 때까지) 프로그램을 테스트할 수 있도록 만들었다.

    피드백

    - 해보는 게 가장 빠르게 배울 수 있다!
    - 커뮤니케이션이 중요하다...
    - 피보나치는 F로 시작하는 게 아니라 P로 시작한다...ㅎ 다음에 또 만들게 된다면(?) pbnc로 하자.
    - 프로그램 설계 단계에 오류가 있었다. 수열 0번째, 1번째에 1을 대입해 놓고, while 반복문 안에서는 요청값이 2 이하일 때 1이 나오도록 했다. `fbnc[0] = 1; fbnc[1] = 1;` 을 굳이 할 필요가 없었다.

    앞으로

    - while문을 이용한 반복실행 코드를 만들어보자.
    - 군더더기가 있기는 했지만, 일단 계속 더 만들어보자!

    뿌듯.


Designed by Tistory.