Notice
Recent Posts
문제 풀이 및 개발 공간
[백준] 2635번 수 이어가기 문제! (silver 5 본문
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
int n=Integer.parseInt(br.readLine());
int before=0; //이전의 수 개수
int wantN=0; //원하는 2번째 수의 값
int num1;
int num2;
int num3;
int count=0; //개수 세기
for(int secondN=1; secondN<=n; secondN++) {
num1=secondN;;
num2=n-secondN;
num3=0;
count=3; //n, secondN,n-secondN; 총 3개를 구한 것이므로
while(true) {
num3=num1-num2;
num1=num2;
num2=num3;
count++; //이부분
if(num2<0) {
count--; //num2가 0보다 작게 만드는 과정에서 count++됐으므로 --
break;
}
}
if(count>before) {
before=count;
}//규칙을 보면 2번째 수의 값이 1에서부터 커질때,
//n/2를 기점으로 수가 점점 커지다가 일정 수부터 다시 작아진다.
//따라서, 현재의 수의 개수가 전보다 클때는 계속 시행하다가,
else if(before>count){
wantN=secondN-1;
break;
}//현재의 수의 개수가 전보다 작아지면, 이제 수의 개수가
//줄어드는 시점에 진입한것이므로, break를 통해 탈출한다.
else {
continue;
}
}
wantN= n==1 ? 1:wantN;//이 부분에서 100%에서 틀렸다로 채점되었다.
//위의 수를 구하는for문에서, 만약 n이 1일 경우에
//for문에서 else if 가 아닌 if문을 통과하고, 이럴경우 wantN에 원하는 값을
//대입시키지 못한다. 따라서, 그럴 경우를 잡아준다.
//만약 for문안에서, else문뒤에, wantN=secondNd이런식으로 작성하면,
//위의 조건문이 필요없지만, secondN의 모든 경우에서 그런작업을 실시하기 보다는
//한번의 조건식으로 판단해서 저장하는 것이 효율적이라 판단되었다.
bw.write(before+"\n");
bw.write(n+" "+wantN);
num1=n;
num2=wantN;
while(true) {
num3=num1-num2;
num1=num2;
num2=num3;
if(num2>=0) {
bw.write(" "+num2);
}
else {
break;
}
}
bw.flush();
}
}
'백준공부 > java' 카테고리의 다른 글
[백준] 15552번 빠른 A+B 문제! (bronze 4 (0) | 2022.08.01 |
---|---|
[백준] 1459번 걷기 문제! (silver 4 (0) | 2022.07.31 |
[백준] 2476번 주사위 게임 문제! (bronze 3 (0) | 2022.07.31 |
[백준] 5554번 심부름 가는 길 문제! (bronze 4 (0) | 2022.07.26 |
[백준] 2828번 사과 담기 게임 문제! (silver 5 (0) | 2022.07.26 |