반응형
안녕하세요!
오늘은 약수의 합 문제를 풀어보았습니다~~
문제
풀이
저는 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 다 정복하고싶네여,,,,
내일도 화이팅!
반응형
'Algorithms > 문제 풀이' 카테고리의 다른 글
[프로그래머스] Level 1. 문자열을 정수로 바꾸기 (0) | 2023.01.17 |
---|---|
[프로그래머스] Level 1. 시저 암호 (0) | 2023.01.17 |
[프로그래머스] Level 1. 이상한 문자 만들기 (0) | 2023.01.17 |
[프로그래머스] Level 1. 정수 제곱근 판별 (0) | 2023.01.17 |
[프로그래머스] Levle.1 콜라츠 추측 (0) | 2023.01.17 |