728x90
반응형

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

 

1110번: 더하기 사이클

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

www.acmicpc.net

 


나는 이 문제를 String으로 풀었는데 다른 분들은 정수로 변환해서 푸셨다.

근데 String으로 풀었을 때 로직을 잘못짜면 0이 입력됐을 때 00으로 처리해서 while문을 못빠져나오기도 하더라,,

(내 경험담ㅠ) 

 

정수로 풀면 뭔가 오래 걸릴 문제는 아니었는데 괜히 String으로 멋지게 풀어보려다가 디버깅하다가 시간 많이 걸린 문제ㅠㅡㅠ


[내가 String으로 푼 문제]

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String origin = br.readLine();
        int cycle = 0;
        String newNum = origin;

        while(true){
            if(newNum.length()==1) {
                cycle++;
                newNum = newNum+newNum;
                if(newNum.charAt(0) == '0')
                    newNum = Character.toString(newNum.charAt(1));
            }
            else{
                cycle++;
                newNum = Character.toString(newNum.charAt(1))+Integer.toString((newNum.charAt(0)-'0'+newNum.charAt(1)-'0')%10);
                if(newNum.charAt(0) == '0')
                    newNum = Character.toString(newNum.charAt(1));
            }
            if(origin.equals(newNum))
                break;
        }
        System.out.println(cycle);
    }
}

 

[정수로 푼 문제]

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int origin = Integer.parseInt(br.readLine());
        int cycle = 0;
        int newNum = origin;

        while(true){
            newNum = newNum%10*10 + ((newNum/10 +newNum%10)%10);
            cycle++;

            if(origin == newNum)
                break;
        }
        System.out.println(cycle);
    }
}
728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기