본문 바로가기

Algorithm

백준 - 1110번 (더하기 사이클)

728x90

드디어 반복문 단계 끝 

 

이 문제도 쉬움

내가 잘 안쓰는 문법으로 풀 수 있길래 기억용으로 정리함

(물론 난 그렇게 풀지 않음. 당연함. 난 .. 언제쯤 .. ㅇㅉ..)

 

아무튼 문제 링크

문제 요약

입력) 첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.
출력) 첫째 줄에 N의 사이클 길이를 출력한다.

사이클 조건) 입력 받은 수를 갖고 새로운 수를 만드는데 이 값과 입력값이 같을 때까지 사이클을 반복한다.

 

김소깡 풀이

import Foundation

let input = Int(readLine()!)!
var count: Int = 1

func createNewValue(value: Int) -> Int {
    let value_10 = value / 10
    let value_01 = value % 10
    return (value_01 * 10) + ((value_10 + value_01) % 10)
}

var newValue = createNewValue(value: input)

while input != newValue {
    count += 1
    newValue = createNewValue(value: newValue)
}

print(count)

나도 길다는 것. 안다. 쉿. 조용.

 

근데 분명 또 문법 장인들이 좋은 코드를 썼을 것 같다는 생각에 찾아봤는데 .. 

let N = Int(readLine()!)!

var cycle = 0
var newN = N

repeat {
    let l = newN / 10
    let r = newN % 10
    let sum = l + r
    
    newN = r * 10 + sum % 10
    cycle += 1
} while (N != newN)

print(cycle)

원리는 똑같고 여기서 사용한 문법 중에서 repeat while을 가볍게 알아보고자 한다.

 

쉽게 말하자면 우리가 흔히 알고 있는 do while의 Swift 버전이라고 생각하면 된다.

그래서 do while처럼 블럭 내 코드는 1회는 (최초) 반드시 실행된다.

처음부터 조건을 체크해서 실행하는지 / 아니면 일단 실행하고 그 뒤로 조건을 체크하는지 의 차이가 있다.

 

Swift에서 do while을 쓰고 싶다면 repeat while로 쓰자.

'Algorithm' 카테고리의 다른 글

[백준] 2675번: 문자열 반복  (0) 2022.09.11
백준 - 1차원 배열  (1) 2022.08.27
백준 - 10951번  (0) 2022.08.23
백준 - 구구단  (0) 2022.08.20
Set을 잘 쓰자.  (0) 2022.08.20