Where who wants to meet someone
콜라츠 수열 만들기 본문
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 |