상냥한 세상 :: [백준]1110번: 더하기 사이클

본문으로 바로가기

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

category Computer Science/BAEKJOON JAVA Practice 2022. 1. 14. 16:00

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

 

1110번: 더하기 사이클

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

www.acmicpc.net

  • 문제

 


  • 코드 1
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        
        //처음 입력받을 숫자 설정
        int N=in.nextInt();
        
        in.close();
        
        //다음에 올 숫자의 십의자리
        //T=((N%10)*10);
        
        
        //다음에 올 숫자의 일의자리
        //예를들어 98를 입력하면 (9+8)%10=7이된다.
        //예를들어 26을 입력하면 (2+6)%10=8이된다.
        //O=((N / 10) + (N % 10)) % 10;
        
        //for문 안에 들어서면서 N의값이 바뀔 수 있으니 copy변수에 N을 따로 저장
        //나중에 바뀐 N과 copy가 같은지 체크하는 용도
        int copy=N;
        
        //사이클이 돌아가는 횟수를 세는 변수 count
        int count=0;
        while(true){
            
            //최초 입력한 N이 아래의 계산식을 거쳐 다시 최초입력한 숫자로 찾아가는데
            //도움을 주는 식
            //N=T+O
            //ex) 26입력->68->14->84->42->26 
            N=((N % 10) * 10) + (((N / 10) + (N % 10)) % 10);
            
            //얼마나 많은 사이클이 돌아갔는지 매 계산마다 count를 올려준다.
            count++;
            
            //만약 다시 돌아온 숫자가 최초로입력한 숫자를 복사한 copy에 있는 
            //것과 동일하다면 반복문을 멈춘다.
            if (copy==N){
                break;
            }
        }
        System.out.println(count);
    }
}

처음이라 그런지 생각보다 로직을 짜는게 힘들었다.
설명은 주석을 참고하면 도움이 될 것이다. 

정상 작동하는 모습


  • 결과


  • 코드 2
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));
        
        //처음 입력받을 숫자 설정
        int N=Integer.parseInt(br.readLine());
        
        br.close();
        
        //다음에 올 숫자의 십의자리
        //T=((N%10)*10);
        
        
        //다음에 올 숫자의 일의자리
        //예를들어 98를 입력하면 (9+8)%10=7이된다.
        //예를들어 26을 입력하면 (2+6)%10=8이된다.
        //O=((N / 10) + (N % 10)) % 10;
        
        //for문 안에 들어서면서 N의값이 바뀔 수 있으니 copy변수에 N을 따로 저장
        //나중에 바뀐 N과 copy가 같은지 체크하는 용도
        int copy=N;
        
        //사이클이 돌아가는 횟수를 세는 변수 count
        int count=0;
        while(true){
            
            //최초 입력한 N이 아래의 계산식을 거쳐 다시 최초입력한 숫자로 찾아가는데
            //도움을 주는 식
            
            //ex) 26입력->68->14->84->42->26 
            N=((N % 10) * 10) + (((N / 10) + (N % 10)) % 10);
            
            //얼마나 많은 사이클이 돌아갔는지 매 계산마다 count를 올려준다.
            count++;
            
            //만약 다시 돌아온 숫자가 최초로입력한 숫자를 복사한 copy에 있는 
            //것과 동일하다면 반복문을 멈춘다.
            if (copy==N){
                break;
            }
        }
        System.out.println(count);
    }
}

BufferedReader로만 바꿔줬을뿐 로직자체는 바뀌지 않았다. 

정상 작동하는 모습


  • 결과


  • 코드 1, 2 성능 비교

Scanner 사용
BufferedReader 사용

 

'Computer Science > BAEKJOON JAVA Practice' 카테고리의 다른 글

[백준]10818번: 최소, 최대  (0) 2022.01.15
[백준]10951번: A+B-4  (0) 2022.01.14
[백준]10952번: A+B-5  (0) 2022.01.13
[백준]10871번: X보다 작은 수  (0) 2022.01.13
[백준]2439번: 별 찍기 -2  (0) 2022.01.13