Lust3r 2024. 5. 16. 00:22
728x90

문제

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

 

프로그래머스

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

programmers.co.kr

 

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

import Foundation

func solution(_ left:Int, _ right:Int) -> Int {
    var result = [Int]()

    for i in left...right {
        let miniNum = Int(sqrt(Double(i)))

        miniNum * miniNum == i ? result.append(-i) : result.append(i)
    }

    return result.reduce(0, +)
}

- 규칙을 봤을 때, 약수의 개수가 홀수개인 수는 제곱으로 가능한 수인 것 같았다.

- sqrt로 제곱수를 구하고 그 수를 제곱했을 때 원래 수와 같다면 음수를, 다르다면 양수를 result에 담아 reduce로 결과를 반환했다.

 

// 풀이 1
func solution(_ left: Int, _ right: Int) -> Int {
    return (left...right).map { i in (1...i).filter { i % $0 == 0 }.count % 2 == 0 ? i : -i }.reduce(0, +)
}

// 풀이 2
import Foundation

func solution(_ left:Int, _ right:Int) -> Int {
    var answer = 0

    for number in left...right{
        if floor(sqrt(Double(number))) == sqrt(Double(number)) {
            answer -= number
        } else {
            answer += number
        }
    }
    return answer
}

 

 

점수: +1