[알고리즘] Swift -프로그래머스 연습문제 #181881(조건에 맞게 수열 변환하기 2)

2023. 5. 24. 21:39ALGORITHM/Swift

728x90
반응형

 

문제링크

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

 

프로그래머스

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

programmers.co.kr

 

 

 

 

 

분석

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
반응형