본문 바로가기

Algorithm/백준

백준 1110번 - 더하기 사이클 [JAVA]

백준 1110번 문제를 풀어보았다. 간단한 문제였지만 약간의 사고 방식을 요구하는 문제였다.

문제의 조건대로 처음에 받은 숫자가 10보다 작은 경우 앞에 0을 붙여 두자리 수로 만들어 주고

사이클에 맞게 새로운 수를 생성해 준 후 원래 수와 같다면 탈출하는 방식으로 접근했다.

 

이때 정수를 문자열로 변경해주고 문자열을 정수로 변경해주는 작업을 병행했다.

// 정수 -> 문자열
int num;
String str;
str = String.valueOf(num);

// 문자열 -> 정수
String str;
int num;
num = Integer.parseInt(str);
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));
        String str,temp;
        str = br.readLine();
        int A,B;
        if (Integer.parseInt(str)<10)
        {
           temp = ( "0" + str) ;
        }
        else
        temp = str;
        String[] st = temp.split("");
        A = Integer.parseInt(st[0]);
        B = Integer.parseInt(st[1]);
        int count=0;
        while(true)
        {   
            int C;
            if (A+B >=10)
            {
                C = A+B;
                C = C %10;
                count++;
            }
            else
            {
                C = A+B; 
                count++;
            }
            if(Integer.parseInt(str)==Integer.parseInt(String.valueOf(B) + String.valueOf(C)))
            {
                break;
            }
            A = B;
            B = C;
            
        }
        System.out.println(count);
        br.close();
    }
    
}

 

생각보다 복잡하게 풀었다.

굳이 이렇게 풀어야 하나 싶어서 다른 풀이를 찾아보았다.

 

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));
        String str;
        str = br.readLine();
        int n,A,B,temp;
        n = Integer.parseInt(str);
        temp = n;
        int count=0;
        while(true)
        {   
            A = temp / 10;
            B = temp % 10;
            temp = B * 10 + (A+B) % 10;
            count++;
            
            if (n == temp) break;
            
        }
        System.out.println(count);
        br.close();
    }
    
}

단순 문자열을 복잡하게 바꾸고 따로 처리해줄 필요 없이

나누기, 나머지를 이용하여 새로운 수를 만들어주는 로직을 찾기만 하면 쉽게 해결할 수 있었다.

메모리와 시간은 그렇게 차이나진 않았지만, 전보단 줄긴 했고 코드가 짧아져서 가독성이 좋아졌다.

 

너무 복잡하게 생각하지 말고, 간단하게 생각하는 습관을 길러야겠다.

'Algorithm > 백준' 카테고리의 다른 글

백준 바이러스 2606 파이썬  (0) 2023.08.26
백준 10809번 - 알파벳 찾기 [JAVA]  (0) 2022.01.16