문제를 풀어보았습니다.
자바 배운지 한달차.. 아직매우 부족한 코드라는 것을 감안하여 주시기 바랍니다.
문제가 이렇게 주어졌습니다.
제가 푼 방법은 접은글을 클릭해주세요
1. int x 를 스캐너로 받아야겠군
2. x가 0<=x <=99 일때 무한 루프를 돌겠군(while문)
3. while문에서 if로 케이스를 나눠주어야겠군
4. x가 <10일때는 x*10 + x 해서 만약에 9이면 99, 8이면 88이 되도록 해야겠군
5. x가 10부터는 자릿수들을 더 해주는 거니
x를 10으로 나눈 몫과 나머지를 더해주고 그걸 1의 자리로 가져가고
x를 10으로 나눈 나머지를 *10 해서 10의자리로 가져가도록 해야겠군
6. 그리고 이 값들이 x가 되어 계속 돌아야하니
이 값을 다른 변수y에 저장한다음
조건을 y의 조건으로 바꿔야겠군
7. 마지막으로 원래 입력받았던 x와 계속 바꼈던 y가 같으면
몇번 돌았는지(index)를 출력하고 break를 해야겠군
8. 그런데 index는 연산을 할때마다 ++을 해주어야겠군
이렇게 생각을 했습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
import java.util.Scanner;
public class bj1110 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int index = 0;
int x = s.nextInt();
int result =0;
int y = x; //계속 변화시킨 거랑 처음거랑 비교해야하기 때문에 y선언
if (x>=0 &&x<=99) {
while (true) {
if (y<10) { //계속 바뀌는 수의 조건이 맞아야하기 때문에 조건식이 y
result = y*10 +y;
index++;
y=result; //y를 계속 바꿔준다
}
else {
result = ((y%10)*10) + (((y/10)+(y%10))%10);
index++;
y=result;
}
if (y==x) {//처음입력한 수랑 계속 바뀐 수가 같으면
System.out.println(index);//인덱스 출력하고 나온다.
break;
}
}
}
s.close();
}
}
|
cs |
그래서 저의 코드는 이렇게 나왔습니다!
그리고 나서 풀면 볼 수 있는 상위권님들의 코드를 보았습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.io.*;
public class bj1110 {
public static void main(String[] args)throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int number = Integer.parseInt(br.readLine());
int count = 0;
int result = number;
do {
result = ((result % 10) * 10) + (((result / 10) + (result % 10)) % 10);
count++;
} while (number != result);
System.out.println(count);
}
}
|
cs |
uutak2000 님이 공개해주신 코드인데요( 맞은 사람에 2위 랭크되신 공개된 코드입니다.)
저는 아직 버퍼를 배우지 않아서 버퍼 사용은 모르겠지만
스캐너를 쓰더라도
코드가 3줄로 끝났습니다.....
이 분은 number을 입력받고, (저의 코드에서 x)
result 에 값을 저장을 하고(저의 코드에서 y와 같은 역할)
do while문을 사용하셨군요
일단 처음에 result 에
값을 저장하고
while문 안에 number와 result가 같지않으면 계속하라 했으니
계속 do안의 문장이 돌 것이고
number와 result가 같아지면 break되겠네요
너무 .. 똑똑한 코드입니다.. ㅠㅠ
저처럼 if문으로 케이스를 나누지 않아도 되었네요..
이렇게 고수님들의 코드를 배워갑니다.
오늘 풀이는여기까지 하도록 하겠숩니다.
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[백준] 1110 더하기 사이클 파이썬 풀이 (1) | 2021.06.15 |
---|---|
[백준] 2884 알람시계 파이썬 풀이 (0) | 2021.06.15 |
[백준] 백준 문제 제출할 때 어떻게 하는지 모르는 사람~! input()이 대체 뭔데! 입력값을 어떻게 테스트 하는데! 백준 제출 하는 법 (0) | 2021.06.15 |
[백준] 2588 곱셈 파이썬 풀이 (0) | 2021.06.15 |
[백준] 10869 사칙연산 파이썬 풀이 (0) | 2021.06.15 |