728x90
반응형
문제
1) 피보나치 수열을 출력한다. 피보나치 수열이란 앞의 2개의 수를 합하여 다음 숫자가 되는 수열이다.
2) 입력은 피보나치 수열의 총 항의 수 이다. 만약 7이 입력되면 1 1 2 3 5 8 13을 출력하면 된다.
입력
첫 줄에 총 항수 N(3<=N<=45)이 입력된다.
출력
첫 줄에 피보나치 수열을 출력합니다.
입력예시
10
출력예시
1 1 2 3 5 8 13 21 34 55
풀이 및 해설
import java.util.Scanner;
public class Main {
//Scanner로 입력받은 숫자 n을 넘겨받음
public String solution(int n){
//문자열로 답 answer을 설정
String answer = "";
//첫번째 수와 두번째 수는 1로 고정이므로 고정값으로 정의
int num1 = 1;
int num2 = 1;
//앞의 두 수를 합친 다음 숫자 선언
int nextNum;
//문자열 answer에 첫번째 수 와 두번째 수 (고정값) 넣기. 빈 문자열 " " 을 추가 해 띄어쓰기 효과
answer += num1 + " ";
answer += num1 + " ";
//세번째 숫자부터 n번째 숫자까지 반복문
for (int i = 2; i<n; i++){
//다음 숫자는 앞의 두 숫자의 합
nextNum = num1 + num2;
//answer에 앞 두 숫자의 합을 구한 nextNum 누적
answer += nextNum + " ";
//다음 반복문을 위해 한칸씩 옆으로 이동
num1 = num2;
num2 = nextNum;
}
//전부 누적 한 문자열 answer return
return answer;
}
//main 함수
public static void main(String[] args) {
Main T = new Main();
//scanner로 입력값을 받는 부분
Scanner sc = new Scanner(System.in);
//입력한 숫자를 받음
int n = sc.nextInt();
// String answer을 출력
System.out.println(T.solution(n));
}
}
배열을 이용해 해결한 풀이
import java.util.Scanner;
public class Main {
//Scanner로 입력받은 숫자 n을 넘겨받음
public int[] solution(int n){
// 배열로 답 answer을 설정
int[] answer = new int[n];
//첫번째 수와 두번째 수는 1로 고정이므로 고정값으로 정의
answer[0] = 1;
answer[1] = 1;
//배열의 i번째는 그 전전수 + 그 전 수임을 지정함
for (int i = 2; i<n; i++){
answer[i] = answer[i-2] + answer[i-1];
}
//전부 누적 한 문자열 answer return
return answer;
}
//main 함수
public static void main(String[] args) {
Main T = new Main();
//scanner로 입력값을 받는 부분
Scanner sc = new Scanner(System.in);
//입력한 숫자를 받음
int n = sc.nextInt();
// 배열 answer을 출력
for (int x : T.solution(n)) System.out.print(x + " ");
}
}
반응형
'Java 알고리즘' 카테고리의 다른 글
[Java] 코딩테스트 입문 - 두 수의 차 (0) | 2024.01.14 |
---|---|
[Java] 코딩테스트 입문 - 두 수의 합 (2) | 2024.01.13 |
[Java | 알고리즘] 09. 숫자만 추출 / 정답 및 해설 (0) | 2023.01.19 |
[Java | 알고리즘] 08. 유효한 팰린드롬 / 정답 및 해설 / replaceAll() , toUpperCase() 사용 (0) | 2023.01.18 |
[Java/알고리즘] 07 회문 문자열 정답 및 해설 (0) | 2023.01.15 |