Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Tags more
Archives
Today
Total
관리 메뉴

luke

[백준 ] - 더하기 사이클 (1110) (자바/Java) 본문

알고리즘문제/백준 문제(Java)

[백준 ] - 더하기 사이클 (1110) (자바/Java)

luke-king 2024. 5. 12. 15:23

 

 

 

 

 

문제 : https://www.acmicpc.net/problem/1110

 

 

 

 

 

 

 

 

 

 

문제.


 

 

 

 

 

 

 

풀이.


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.close();

        int cnt = 0;
        int copy = n;

        while (true) {
            n = ((n % 10) * 10) + ((n / 10) + (n % 10)) % 10;
            cnt++;

            if (copy == n) {
                break;
            }
        }
        System.out.println(cnt);
    }

}

 

오늘의 문제는 " 더하기 사이클 " 문제다.

문제를 풀면서 필자는 문자열로 받은 뒤 형변환을 통해 알고리즘을 짜봤지만 코드가 지저분해지고 메모리도 많이 차지하면서 복잡했다. 그러다 정수로 입력받아 풀면 보다 간단한 코드가 나오는 걸 볼 수 있어 풀었다.

그럼 바로 문제 풀이를 해보겠다.

 

1. n, cnt 변수들은 문제 지문을 읽으면 필수 인걸 확인할수 있다. 여기서 copy를 추가해줬는데 이유는 더하기 사이클이 돌았을 때 처음 입력한 값과 같은 값이 나오면 종료해줘야 하기 때문이다.

 

2.((n % 10) * 10) 은 입력한 값의 1의 자리가 새로운 10의 자리로 들어간다.

((n / 10) + (n % 10)) % 10 은 입력한 값 10의 자리와 1의 자리를 더한 값이 나와 새로운 10의 자리와 1의자리를 더해 지문에 맞는 식이 나온다.

 

3. 마지막으로 copy 의 값과 입력값이 같을 경우 루프 종료를 해주고 cnt 증가한 최종 값을 출력한다.