알고리즘/백준 문제풀이

[자바 java]백준1110 더하기 사이클(완전 초보자풀이) ,scanner, while문 사용

자바칩 프라푸치노 2020. 9. 26. 09:23
 

1110번: 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,

www.acmicpc.net

문제를 풀어보았습니다.

자바 배운지 한달차.. 아직매우 부족한 코드라는 것을 감안하여 주시기 바랍니다.

문제가 이렇게 주어졌습니다.

 

제가 푼 방법은 접은글을 클릭해주세요

더보기

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문으로 케이스를 나누지 않아도 되었네요..

이렇게 고수님들의 코드를 배워갑니다.

오늘 풀이는여기까지 하도록 하겠숩니다.

728x90