Where who wants to meet someone

1로 만들기 본문

728x90

문제

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

 

프로그래머스

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

programmers.co.kr

 

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

import Foundation

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

    while arr.max() != 1 {
        for i in arr.indices where arr[i] != 1 {
            arr[i] = arr[i] % 2 == 0 ? arr[i] / 2 : (arr[i] - 1 ) / 2
            result += 1
        }
    }

    return result
}

- arr의 가장 큰 값이 1이 아니라면 while문 반복(전부 1이 되었다면 가장 큰 값은 1이기 때문)

- for문으로 각 인덱스를 반복하는데, 요소가 1이 아닌 항목만 작업

- 짝수면 2로 나누고, 홀수면 1을 빼고 2로 나누는 작업을 하면서 result값 증가

 

import Foundation

func solution(_ num_list:[Int]) -> Int {
    func dfs(_ num: Int, _ count: Int) -> Int {
        if num == 1 { return count }
        return dfs(num / 2, count + 1)
    }
    return num_list.reduce(0) { $0 + dfs($1, 0) }
}

- 재귀함수를 활용하여 해결한 풀이가 있었다.

 

점수: +1