[伯俊-Java]在鬼1~3号
3218 ワード
今日発表する内容は「回帰」に関するアルゴリズムです.
授業中に聞くのは難しすぎて、ざっと見て通り過ぎた.
今回正式に理解するには、当時の私は本当に恨みを抱いていた.
10872)工場
復帰の核心は終わりと言える.
必ず停止を繰り返す場所を考慮して符号化を行う.
工場は、入力されたn値が1になるまでf(n−1)を呼び出し続ける.ここでは,コードを記述し,結果値をパラメータに入れ,最後に結果値を返す.
問題を解いてから、これが尻尾の耳だと知った.
これは授業中に理解できなかった内容ですが、自分で書いていて、本当に不思議です.
フィボナッチ数列を知らない人のために説明すると、フィボナッチ数列の第1項と第2項は1で、次の項から前項の和因数列を指します.
例えば、4ヶ月目がf(4)である場合、f(4)=f(3)+f(2)は、f(4)=f(2)+f(1)+f(2)であるため、f(4)は3である.
式で表すとfibo(n-1)+fibo(n-2)です.
項と第2項が与えられているため,関数のパラメータ値が1または2の場合,停止再帰はフィボナッチ数列アルゴリズムの核心である.
初めて問題を見たとき、こんな変な星を見たのは初めてです.
この問題の核心はボックスの中の空白がどのように発生したのかである.
小さな長方形を考慮します.3*3の場合、空白空間の座標は(1,1)となります.
隣の四隅は三格移動したはずです(1,4).
上も下も同じなので、x座標もy座標も3で1で割るべきです.
これを99に代入しましょう99は(3,3)~(3,5)です.隣の四隅は6マス移動したはず(3,12)~(3,15).
上記の式と同様に、すべての座標に3を分けることで問題を解決できます.
このようにして、27*27の時9分で解決できます.
ここまで解決してきましたが、タイムアウトが発生して迷いました.
理由を探しているうちに、print関数が繰り返されるたびに呼び出されることに気づき、出力方式をStringBuilderに変更しようとしました.
StringBuilderは、出力したい文字列をappendとして一度に出力する文字列として追加するクラスです.
以前の質問では、入力で効率を上げるためにBufferReaderを使うことを知っていましたが、今回は出力があることを知りました.
これからはよく使う習慣を身につけなければならない.
授業中に聞くのは難しすぎて、ざっと見て通り過ぎた.
今回正式に理解するには、当時の私は本当に恨みを抱いていた.
10872)工場
復帰の核心は終わりと言える.
必ず停止を繰り返す場所を考慮して符号化を行う.
工場は、入力されたn値が1になるまでf(n−1)を呼び出し続ける.ここでは,コードを記述し,結果値をパラメータに入れ,最後に結果値を返す.
問題を解いてから、これが尻尾の耳だと知った.
これは授業中に理解できなかった内容ですが、自分で書いていて、本当に不思議です.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
int result = 1;
System.out.println(pact(T, result));
}
public static int pact(int a, int res){
res = res * a;
if(a <= 1) return res; // 종단부
return pact(a-1, res); // 꼬리재귀를 위해 함수 그대로 리턴
}
}
10870回)フィボナッチ数列フィボナッチ数列を知らない人のために説明すると、フィボナッチ数列の第1項と第2項は1で、次の項から前項の和因数列を指します.
例えば、4ヶ月目がf(4)である場合、f(4)=f(3)+f(2)は、f(4)=f(2)+f(1)+f(2)であるため、f(4)は3である.
式で表すとfibo(n-1)+fibo(n-2)です.
項と第2項が与えられているため,関数のパラメータ値が1または2の場合,停止再帰はフィボナッチ数列アルゴリズムの核心である.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
System.out.println(fibo(T));
}
public static int fibo(int t){
if(t == 0) return 0;
if(t == 1) return 1;
if(t == 2) return 1;
return fibo(t-1) + fibo(t-2);
}
}
2447号)星図-10初めて問題を見たとき、こんな変な星を見たのは初めてです.
この問題の核心はボックスの中の空白がどのように発生したのかである.
小さな長方形を考慮します.3*3の場合、空白空間の座標は(1,1)となります.
隣の四隅は三格移動したはずです(1,4).
上も下も同じなので、x座標もy座標も3で1で割るべきです.
これを99に代入しましょう99は(3,3)~(3,5)です.隣の四隅は6マス移動したはず(3,12)~(3,15).
上記の式と同様に、すべての座標に3を分けることで問題を解決できます.
このようにして、27*27の時9分で解決できます.
ここまで解決してきましたが、タイムアウトが発生して迷いました.
理由を探しているうちに、print関数が繰り返されるたびに呼び出されることに気づき、出力方式をStringBuilderに変更しようとしました.
StringBuilderは、出力したい文字列をappendとして一度に出力する文字列として追加するクラスです.
以前の質問では、入力で効率を上げるためにBufferReaderを使うことを知っていましたが、今回は出力があることを知りました.
これからはよく使う習慣を身につけなければならない.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for(int i = 0; i < T; i++){
for(int j = 0; j < T; j++)
func(i,j, T, sb);
sb.append("\n");
}
System.out.print(sb);
}
public static void func(int i,int j, int t, StringBuilder sb){
if((i/t) % 3 == 1&& (j/t)%3 == 1)sb.append(" ");
else{
if(t/3 == 0) sb.append("*");
else func(i, j, t/3, sb);
}
}
}
Reference
この問題について([伯俊-Java]在鬼1~3号), 我々は、より多くの情報をここで見つけました https://velog.io/@win6801/백준-Java-재귀-13번テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol