Where who wants to meet someone

콜라츠 수열 만들기 본문

프로그래머스 알고리즘 문제 기록/코딩 기초 트레이닝

콜라츠 수열 만들기

Lust3r 2024. 1. 16. 01:18
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/181919

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 답안 / 다른 사람들의 답안

import Foundation

func solution(_ n:Int) -> [Int] {
    var n = n
    var result = [n]

    while n != 1 {
        n % 2 == 0 ? (n = n / 2) : (n = 3 * n + 1)

        result.append(n)
    }

    return result
}

- n이 1이 될 때까지 반복하되, n이 짝수면 n의 값을 2로 나누고, 홀수면 3 * n + 1의 작업을 해준다.

- 작업이 끝나면 끝난 값을 append를 통해 result에 넣어준다.

 

func solution(_ n: Int) -> [Int] {
    return sequence(first: n) { i in i == 1 ? nil : i % 2 == 0 ? i / 2 : 3 * i + 1 }.map { $0 }
}

 

 

Sequence | Apple Developer Documentation

A type that provides sequential, iterated access to its elements.

developer.apple.com

- sequence 메서드를 사용하여 n부터 시작하는 수열을 생성하고, 그 수열의 각 요소에 map을 적용하여 배열을 반환한다.

- i가 1이면 nil을 반환함으로써 수열이 끝나고, 1이 아니라면 짝수와 훌수의 경우를 적용하는 삼항 연산자를 사용하고 있다.

- 해당 수열 결과만으로는 타입이 UnfoldSequence<T, State> 이므로 반환타입을 맞춰주기 위해 map을 사용하고 있다.

 

점수: +1

'프로그래머스 알고리즘 문제 기록 > 코딩 기초 트레이닝' 카테고리의 다른 글

간단한 논리 연산  (0) 2024.01.16
배열 만들기 4  (0) 2024.01.16
카운트 업  (0) 2024.01.16
배열 만들기 2  (0) 2024.01.16
수열과 구간 쿼리 4  (0) 2024.01.15