본문 바로가기
프로그래머스 Algorithm

[프로그래머스] 약수의 개수와 덧셈 Kotlin

by Echung 2023. 11. 25.

안녕하세요. 이번에는 프로그래머스 약수의 개수와 덧셈 문제를 풀어보려고 합니다.

 

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

 

프로그래머스

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

programmers.co.kr


Problem

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해 주세요.

 

[제한 사항]

1 ≤ left ≤ right ≤ 1,000

사진 1. 입출력 예


Solution

class Solution {
    fun solution(left: Int, right: Int): Int {
        var answer: Int = 0

        for(num in left..right) {
            var count = 0
            for(i in 1..num) {
                if(num % i == 0) {
                    count++
                }        
            }

            if(count % 2 == 0) answer += num
            else answer -= num
        }

        return answer
    }
}

 이번 문제는 약수의 개수와 덧셈을 구하기 위해서 for문을 이용해서 문제를 접근해 보았습니다.

 

1. 다른 사람 코드

class Solution {
    fun solution(left: Int, right: Int): Int {
        return (left..right).map { i -> if((1..i).filter { i % it == 0 }.size % 2 == 0) i else -i }.sum()
    }
}

  다른 사람들은 어떤 식으로 접근을 궁금해서 학습을 위해 다른 사람의 코드를 봐보았습니다. 이번에도 1줄로 작성된 코드가 있어서 코드를 파악해 보았습니다.

 

저의 코드와 다르게 for문을 사용하지 않고 map함수를 사용해서 left에서 right까지 탐색을 진행하였습니다.

그리고 map 함수 안에서 filter을 사용해서 약수를 구하고 size를 사용해서 홀수인지 짝수인지를 확인해 줬습니다.

마지막으로 sum함수를 사용해서 총합을 구하는 방식으로 문제를 접근하였습니다.

 

1줄로 이루어진 코드라서 가독성이 좋고 코틀린스럽게 짜인 코드같아서 향후 저런 식의 코드를 작성하는 연습을 해볼 예정입니다.


Performance

1. 내가 작성한 코드 2. 다른 사람 코드
반응형