TIL ~ 24.04.05

1~12번 / 자릿수 더하기 / 약수의 합

wlsds00_ 2023. 12. 8. 12:09

+) 20240109 : 1~12번 문제의 풀이도 여기에 추가하기로 함

1. 두 수의 차

 class Solution {
        fun solution(num1: Int, num2: Int): Int {
            var answer: Int = 0

            if (-50000 >= num1 && num2 <= 50000) {
            }
            return num1 - num2
        }
    }

 

2. 두 수의 곱  /  3. 몫 구하기  /  4. 나이 출력  /  5. 숫자 비교하기

    // 두 수의 곱
    class Solution {
        fun solution(num1: Int, num2: Int): Int {
            var answer: Int = 0

            if (0 <= num1 && num2 <= 100) {

            }
            return num1 * num2
        }
    }
    
    // 몫 구하기
    class Solution {
        fun solution(num1: Int, num2: Int): Int {
            var answer: Int = 0
            if (0 <= num1 && num2 <= 100) {

            }
            return num1 / num2
        }
    }
    
    // 나이 출력
    class Solution {
        fun solution(age: Int): Int {
            var answer: Int = 0

            if (0 < age && age <= 120) {

            }
            return 2022 - (age - 1)
        }
    }

    // 숫자 비교하기
    class Solution {
        fun solution(num1: Int, num2: Int): Int {
            var answer: Int = 0

            if(0 <= num1 && num2 <= 10000){
                when (num1) {
                    num2 -> return 1
                    else -> return -1
                }
            }
            return answer
        }
    }

    // 두 수의 합
    class Solution {
        fun solution(num1: Int, num2: Int): Int {
            var answer: Int = -1

            if (-50000 <= num1 && num2 <= 50000) {
            }
            return num1 + num2
        }
    }

 

6. 두 수의 나눗셈  /  7. 각도기

  // 두 수의 나눗셈
    class Solution {
        fun solution(num1: Int, num2: Int): Int {
            var answer: Int = 0

            if (0 < num1 && num2 <= 100) {
                answer = ((num1.toDouble() / num2.toDouble()) * 1000).toInt()
            }
            return answer
        }
    }

    // 각도기
    class Solution {
        fun solution(angle: Int): Int {
            var answer: Int = 0

            if (0 < angle && angle < 90) {
                return 1
            } else if (angle == 90) {
                return 2
            } else if (90 < angle && angle < 180) {
                return 3
            } else {
                return 4
            }
        }
    }

 

8. 짝수의 합  /  9. 배열의 평균값  /  10. 짝수와 홀수  /  11. 평균 구하기

  // 짝수의 합
    class Solution {
        fun solution(n: Int): Int {
            var answer: Int = 0

            for (e:Int in 1 .. n) {
                if (e % 2 == 0) {
                    answer += e
                }
            }
            return answer
        }
    }

    // 배열의 평균값
    class Solution {
        fun solution(numbers: IntArray) = numbers.average()
    }

    // 짝수와 홀수
    class Solution {
        fun solution(num: Int) = if (num % 2 == 0) "Even" else "Odd"
    }

    // 평균 구하기
    class Solution {
        fun solution(arr: IntArray) = arr.average()
    }

 

13. 자릿수 더하기

class Solution {
    fun solution(n: Int): Int {
        var answer = 0
        var numbers = n
        
        while (numbers != 0) {
            answer += numbers % 10
            numbers /= 10
        }
        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        println("${answer}")
        return answer
    }
}

 

while 문을 어제 좀 썼더니 오늘은 금방 생각이 났다. 

numbers 를 만들어서 0과 같지 않을 경우에 answer에 numbers 를 10으로 나눈 값을 넣는다. 그리고 numbers를 10으로 나누어서 저장한다. 테스트로 answer를 실행하고 정답을 리턴했다.

 

+) 231222 추가

class Solution {
    fun solution(n: Int): Int  = n.toString().map { it -> it.toString().toInt() }.sum()     
}

 

같은 식을 다른형식으로 풀어보았다.

이번에는 map을 이용했는데 내가 본 예제에서 it -> 이라고 된 부분을 이해하지 못해 찾아보았다. 

 

람다 표현식은 다음과 같은 일반적인 구조를 가집니다:

{ 매개변수 -> 본문 }

여기서 매개변수는 람다 표현식 내에서 사용되는 변수이며, 본문은 해당 람다의 동작을 정의합니다.
원래 코드에서 map 함수는 각 문자를 e로 가져와서 각 문자를 문자열로 변환하고 다시 정수로 변환하여 리스트를 생성합니다. 예를 들어, "123"의 경우에는 리스트 [1, 2, 3]이 생성됩니다.

 

그리고 마지막에 sum으로 전부 더해주면 된다.

 

14. 약수의 합

class Solution {
    fun solution(n: Int): Int {
        var answer = 0
        
        for (i in 1..n) {
            if (n % i == 0) {
                answer += i
            }
        }
        println("${answer}")
        return answer
    }
}

 

for 문을 금방 생각하지 못해서 조금 시간이 들었다.

(i in 1 .. n ) 안에서 1부터 n 까지의 숫자를 만든다.

if 로 내려와서 n에 i 를 나눈 값이 0 과 같을 경우 answer에 i값을 더한다. 그리고 return 한다.

 

개선점

기초 문법의 개념을 정리해서 외우고 많이 써서 필요할때 바로바로 꺼내는 훈련이 필요할것같다.

지금은 이럴 때 썼었으니 이때도 쓸 수 있을 것 같다는 애매한 느낌으로 사용중이라 조금만 응용해야 해도 쓰던것만 쓰는 단점이 있다. 처음보다는 나아졌지만... 어쨌든 열심히 해야겠다.