인프런의 "자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비" 강좌를 수강했습니다.
C, C++, Python, Js 등 다른 언어의 강의도 있으니 본인에게 맞는 강의를 선택하시면 됩니다. 😁
Q2-04. 피보나치 수열(Fibonacci Sequence)
피보나치 수열 : 앞의 두 수를 합하여 다음 숫자가 되는 수열
피보나치 수열을 출력하라.
피보나치 수열의 총 항의 수를 입력한다.
예시 입력 | 예시 출력 |
10 (3<=N<=45) | 1 1 2 3 5 8 13 21 34 55 |
✏️ 내가 쓴 답
피보나치 수열이란 첫 번째 항과 두 번째 항이 1이며 그 뒤의 항은 바로 앞 두 항의 합인 수열이다. (해시넷 위키)
solution() 반환타입은 int[] answer 정수형 변수로 반환한다.
첫 번째 항과 두 번째 항은 1이므로 answer[0], answer[1] 의 값은 1이다.
이를 활용해 입력된 항의 개수만큼 반복문을 돌리자.
여기서 주의할 점은 for문 i의 초기값은 2부터 시작해야 한다. 피보나치 수열 특징이 바로 앞 두 항의 합이기 때문에,
반복문을 돌 때 최소 2개 이상의 항이 앞에 존재해야 한다.
answer[0], answer[1] 은 1로 초기화 했기 때문에 answer[2] 부터 값을 더해간다.
결과는 정답 !!✅
import java.util.Scanner;
public class Main {
public int[] solution(int num) {
int[] answer = new int[num];
answer[0] = 1;
answer[1] = 1;
for(int i=2; i<num; i++) answer[i] = answer[i-2] + answer[i-1];
return answer;
}
public static void main(String[] args) {
Main main = new Main();
Scanner sc = new Scanner(System.in);
for(int x : main.solution(sc.nextInt())) System.out.print(x + " ");
}
}
👨🏻🏫 풀이코드
선생님도 나랑 같은 방식으로 풀이해주셨다.
변형 문제도 살짝 내주셨는데 만약에 배열을 쓰지 않고 출력한다면?!
배열사용 X
배열 사용 없이 변수로 할 뿐, 큰 틀은 바뀌지 않는다.
주의할 점은 연산이 끝난 후, 두번째 항 b -> 첫번째 항 a가 되고
연산 결과인 세번째 항 c -> 두번째 항 b로 바꾸어야 다음 수열 연산이 올바르게 된다는 점 주의 하자!
public void solution(int n){
int a=1, b=1, c;
System.out.print(a+" "+b+" ");
for(int i=2; i<n; i++){
c=a+b;
System.out.print(c+" ");
a=b;
b=c;
}
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n=kb.nextInt();
T.solution(n);
}
'Study > 알고리즘' 카테고리의 다른 글
[알고리즘/인프런] Array(1, 2차원 배열) #2-03. 가위바위보 (0) | 2022.05.08 |
---|---|
[알고리즘/인프런] Array(1, 2차원 배열) #2-02. 보이는 학생 (0) | 2022.05.08 |
[알고리즘/인프런] Array(1, 2차원 배열) #2-01. 큰 수 출력하기 (0) | 2022.05.08 |
[알고리즘/인프런] String(문자열) #1-12. 암호 찾기 (0) | 2022.05.02 |
[알고리즘/인프런] String(문자열) #1-11. 문자열 압축 (0) | 2022.05.02 |