[알고리즘] Swift -프로그래머스 연습문제 #181881(조건에 맞게 수열 변환하기 2)
2023. 5. 24. 21:39ㆍALGORITHM/Swift
728x90
반응형
문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/181881
분석
arr 배열이 주어질 때 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고
50보다 작은 홀수라면 2를 곱하고 다시 1을 더한다.
이러한 작업을 x번 반복한 결과인 배열을 arr(x)일 때 arr(x) = arr(x+1)인 x가 항상 존재한다.
이러한 x 중 가장 작은 값을 리턴하는 문제이다.
풀이
import Foundation
func solution(_ arr:[Int]) -> Int {
var arr1: [Int] = arr
var index = 0
while true {
let arr2 = arr1.map {
if $0 >= 50 && $0 % 2 == 0 {
return $0 / 2
}
if $0 < 50 && $0 % 2 == 1 {
return ($0 * 2) + 1
}
return $0
}
if arr2 == arr1 {
break
}
arr1 = arr2
index += 1
}
return index
}
/Solution/Sources/Solution/Solution.swift:8:20: error: generic parameter 'T' could not be inferred
let arr2 = arr1.map {
^
Swift.Collection:2:28: note: in call to function 'map'
@inlinable public func map<T>(_ transform: (Self.Element) throws -> T) rethrows -> [T]
^
테스트 결과 (~˘▾˘)~
1개 중 0개 성공
xcode에서는 실행되지만 프로그래머스에서는 실행되지 않는 문제가 발생
해결
import Foundation
func solution(_ arr:[Int]) -> Int {
var arr1: [Int] = arr
var index = 0
while true {
let arr2: [Int] = arr1.map {
if $0 >= 50 && $0 % 2 == 0 {
return $0 / 2
}
if $0 < 50 && $0 % 2 == 1 {
return ($0 * 2) + 1
}
return $0
}
if arr2 == arr1 {
break
}
arr1 = arr2
index += 1
}
return index
}
결과
print(solution( [1, 2, 3, 100, 99, 98] ))
728x90
반응형
'ALGORITHM > Swift' 카테고리의 다른 글
[알고리즘] Swift -프로그래머스 연습문제 #92334(2022 카카오 블라인드_신고 결과 받기) (0) | 2023.05.28 |
---|---|
[알고리즘] Swift -프로그래머스 연습문제 #181835(조건에 맞게 수열 변환하기 3) (0) | 2023.05.25 |
[알고리즘] Swift -프로그래머스 연습문제 #181882(조건에 맞게 수열 변환하기 1) (0) | 2023.05.24 |
[알고리즘] Swift -프로그래머스 연습문제 #181873(특정한 문자를 대문자로 바꾸기) (0) | 2023.05.24 |
[알고리즘] Swift -프로그래머스 연습문제 #142086(가장 가까운 같은 글자) (0) | 2023.05.24 |