Where who wants to meet someone

조건에 맞게 수열 변환하기 1 본문

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

조건에 맞게 수열 변환하기 1

Lust3r 2024. 1. 26. 11:33
728x90

문제

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

 

프로그래머스

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

programmers.co.kr

 

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

import Foundation

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

    for i in result.indices {
        if result[i] >= 50 && result[i] % 2 == 0 {
            result[i] /= 2
        } else if result[i] < 50 && result[i] % 2 != 0 {
            result[i] *= 2
        }
    }

    return result
}

- 50과 같거나 크고 짝수이면 2로 나눈 값으로 바꾸고, 50보다 작으면서 홀수라면 2를 곱한 값으로 바꾼 result를 반환

- map으로 삼항연산자를 사용하여 조건을 줬더니 타입 추론 오류가 발생

 

// 풀이 1

import Foundation

func solution(_ arr:[Int]) -> [Int] {
    return arr.map {
        if $0 < 50 && $0 % 2 == 1 {
            return $0 * 2
        } else if $0 >= 50 && $0 % 2 == 0 {
            return $0 / 2
        } else {
            return $0
        }
    }
}

// 풀이 2

import Foundation

func solution(_ arr:[Int]) -> [Int] {
    return arr.map { $0%2 == 0 ? ($0 >= 50 ? $0/2 : $0) : ($0 < 50 ? $0*2 : $0) }
}

// 풀이 3

import Foundation

func solution(_ arr:[Int]) -> [Int] {
    return arr.map { 
        if $0 % 2 == 0 && 50 <= $0 { return $0 / 2 }
        if $0 % 2 != 0 && 50 > $0 { return $0 * 2 }
        return $0
    }
}

- 풀이 1은 for문 안에서 했던 작업을 map 안에서 수행

- 풀이 2는 삼항연산을 사용했지만 true/false일 때 조건을 주는 식으로 해서 오류가 나지 않은 것 같다
(오류가 났었던 코드: arr.map { ($0 >= 50 && $0 % 2 == 0) ? $0 / 2 : ($0 < 50 && $0 % 2 != 0) ? $0 * 2 : $0 }) 

 

점수: ?(네트워크 오류나서 못봄)