반응형

백준 1110번 문제입니다. (solved.ac)기준 브론즈 1 문제입니다.

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

 

1110번: 더하기 사이클

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

www.acmicpc.net

문제

문제 접근

십의 자리, 일의 자리로 나누어 구현을 하였고 새로운 수를 만들기 위하여 문자열로 변환시켜서 더해주고 다시 정수형으로 변환시키는 과정을 구현했습니다.

26을 예로 들면 2 + 6 = 8, 이기 때문에 1번째 사이클에서는 68이라는 새로운 수가 나오게 됩니다. 6 + 8 = 14, 2번째 사이클에서는 84라는 새로운 수가 나오게 됩니다. 8 + 4 = 12, 3번째 사이클에서는 42라는 새로운 수가 나오게 되고 4번째 사이클에서는 4 + 2 = 6, 26이라는 수가 나오게 되어 입력값인 26과 동일한 숫자가 나오게 됩니다. 

1번째 사이클 과정은 var 변수들 선언과 동시에 진행하고 cnt 또한 1사이클은 이미 진행하였기 때문에 1부터 시작합니다. while문을 사용하여 input 이 0이 아니라면 반복하도록 구현했고 반복문 내부에서는 입력값인 input과 새로운 수인 num이 같게 된다면 즉시 탈출하도록 break를 사용하였습니다. 2 + 6 = 8 부분에서 68이라는 새로운 수가 도출될 때 6, 8 이라는 문자를 더하고("68") 이것을 정수(68)로 변환시켜주었습니다.

정답 코드

fun main() {
    
    // 첫째 줄에 input을 입력 받음(N)
    var input = readln().toInt()
    // 십의 자리
    var tens = input / 10
    // 일의 자리
    var units = input % 10
    // 사이클 횟수
    var cnt = 1
    // 새로운 수
    var num = tens + units

    // input이 0이 아니라면 반복 - 입력값이 0 이라면 반복문을 실행하지 않고 cnt값인 1을 출력
    while (input != 0) {
        tens = units
        units = num % 10
        num = tens + units
        // 주어진 수가 새로운 수와 동일하다면
        if (input == (tens.toString() + units.toString()).toInt()) break
        cnt++
    }

    print(cnt)


}
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기