아요 개발 일기

[프로그래머스] Level 1. 약수의 합 본문

Algorithms/문제 풀이

[프로그래머스] Level 1. 약수의 합

소진이 2023. 1. 17. 10:24

안녕하세요!

오늘은 약수의 합 문제를 풀어보았습니다~~


문제

 


 

풀이

 

저는 for-in 문을 사용해서 풀어보았습니다!

일단, n = 0이 아닐때에만 for 문을 n번 반복해줍니다. (n이 0이 아닐시)

그때 만약 n 과 i를 나머지 나눗셈으로 계산했을 때 0이면 (n이 i로 나누어지면 약수)

result 변수에 i 를 더해줍니다. (약수의 합)

간단하죠?? 이제 괜찮다고 생각한 풀이를 보겠습니다.

 

1번 풀이

func solution(_ n:Int) -> Int {
   guard n != 0 else {
        return 0
    }
    return Array(1...n).filter{n % $0 == 0}.reduce(0, +)
}

오 이 풀이는 guard문과 고차함수 filter, reduce를 사용했네요?

guard문은 if문과 유사하며 해당 표현식이 참인지 거짓인지에 따라 구문의 실행 여부를 결정 짓는 방식의 조건문 입니다.

n = 0일때는 0으로 Return하는 조건문을 적어줍니다.

filter 고차함수는 표현식에 해당되는 값만 걸러주고, reduce는 걸러진 값들을 하나로 통합해주는 역할을 합니다.

즉, n % $0 == 0 에 준하는 값을 걸러서 초기값 0에 계속 더해주는 풀이네요!

 

2번 풀이

func solution(_ n:Int) -> Int {
    return n != 0 ? (1...n).filter{n % $0 == 0}.reduce(0){$0 + $1} : 0
}

1번 풀이

한 줄로 아주 간결하게 표현됐네요!

guard문을 삼항연산자로 변경하여 단축시켜줬어요!! 식은 비슷하니까 설명은 넘어가도록하겠습니다 :D

 

$0, $1은 뭐에요? 
클로저 단축 문법으로 매개 변수의 순서를 말합니다. $0 : 0번째 매개 변수, $1 : 1번째 매개 변수

 


정확성 비교

내가 푼 풀이

 

2번 풀이

3번 풀이

역시 간단한건 고차함수보다는 for-in문 같은걸 사용하는게 빠른 것 같아요! :ㅇ

얼른 프로그래머스 Level 1 다 정복하고싶네여,,,,

내일도 화이팅!