newidextendsid   2년 전

처음 짠 코드는 재귀함수로 fibo를 호출하게끔해서 구했는데 시간초과 오류가 떴습니다.

그래서 fibo 함수안에서 for문을 사용해서 시도해봤는데 이것도 시간초과가 돼버리네요.

답은 문제없이 나오는것 같습니다.

제가 간과한게 무엇인지 알 수 있을까요?

dbshin59   2년 전

이렇게 재귀호출하는 방법으로 피보나치 함수를 구현하면 시간이 오래 걸립니다. 함수의 호출이 엄청나게 많이 일어나거든요.

예를 들어 10을 호출하면 9와 8을 호출하고 9는 8과 7을 호출하는것이 반복되어 불필요한 계산이 늘어납니다.

이 문제를 푸는 대표적인 방법은 동적 프로그래밍(DP) 입니다. 검색해 보시는 것을 추천드려요.

newidextendsid   2년 전

아하 알려주셔서 감사합니다

newidextendsid   2년 전

혹시 이 방식을 동적 프로그래밍으로 볼 수 있을까요?

배열에 값을 미리 넣어서 출력할때 미리 넣은값을 사용하게끔 짰는데

이것도 시간초과가 되어서요,, 

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

int[] arrZero = new int[41];

int[] arrOne = new int[41];

int testCase;

Scanner scan = new Scanner(System.in);

testCase = scan.nextInt();

arrZero[0] = 1;

arrZero[1] = 0;

arrOne[0] = 0;

arrOne[1] = 1;

for (int i = 2; i <= 40; i++) {

arrZero[i] = arrZero[i-2] + arrZero[i-1];

arrOne[i] = arrOne[i-2] + arrOne[i-1];

}

for (int i = 0; i < testCase; i++) {

int n = scan.nextInt();

System.out.println(arrZero[n] + " " + arrOne[n]);

}

}

}

dbshin59   2년 전

stringbuilder 이용하니 맞네요.

코드에는 문제가 없는 것 같고, 그냥 java 입출력이 느렸던 것 같습니다.

newidextendsid   2년 전

정말 감사합니다 dbshin님

하나만 더 여쭤도 괜찮을까요?

제가 stringBuilder 숙지가 많이 안되있어서

String 배열을 써서 하려는데 해도 될까요?

아래의 코드는 실패한 코드인데 배열값 각각에 문자형태의 숫자들과

공백들을 넣어서 시도해봤습니다,,

혹시 정말로 실례가 안된다면 stringBuilder로 구현하신것을 부탁드려도 괜찮을까요?

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

// StringBuilder sb = new StringBuilder();

String[] sb = new String[161];

int testCase;

Scanner scan = new Scanner(System.in);

testCase = scan.nextInt();

// sb.append(1+' '+0+' '+0+' '+1+' ');

// sb.append("1 0 0 1 ");

sb[0] = Character.toString(1);

sb[2] = Character.toString(0);

sb[4] = Character.toString(0);

sb[6] = Character.toString(1);

for (int i = 8; i <= 160; i = i + 4) {

sb[i] = Character.toString(i-2);

sb[i+2] = Character.toString(i-2) + Character.toString(i-4);

}

for (int i = 0; i < testCase; i++) {

int n = scan.nextInt();

for (int j = 0; j < 4; j++) {

System.out.print(sb[n*4+j]);

}

}

}

}

dbshin59   2년 전

이겁니다. 가급적이면 코드는 밑에 있는 소스 추가를 이용해주세요.

Stringbuilder랑 String이랑 큰 차이는 없습니다.

newidextendsid   2년 전

네 ! 정말 감사합니다!!!!!!!

댓글을 작성하려면 로그인해야 합니다.