https://school.programmers.co.kr/learn/courses/30/lessons/12924?language=java
문제
Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.
1 + 2 + 3 + 4 + 5 = 15
4 + 5 + 6 = 15
7 + 8 = 15
15 = 15
자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.
제한사항
n은 10,000 이하의 자연수 입니다.
풀이(Kotlin)
class Solution {
fun solution(n: Int): Int {
var sum = 0
var min = 1
var count = 0
for (i in 1.. n){
sum += i
while (sum > n){
sum -= min++
}
if (sum == n) count++
}
return count
}
}
- 해당문제는 연속된 수를 더했을 때 그 값이 n이랑 맞는 경우를 찾는 문제입니다. 해당 문제 같은 경우 부분합으로 풀 수 있습니다. sum에 1부터 n까지 더한다고 할 때 매번 합할 때마다 n을 초과하는지 검사합니다. 만약 n을 초과한다면 더한순서대로 해당값을 빼주면 됩니다. 여기서 값이 1씩 늘어난다고 했으므로 min값을 설정하여 뺄 때마다 1씩 늘려가면 됩니다.
풀이(Java)
public class Solution {
public int solution(int n) {
int sum = 0;
int min = 1;
int count = 0;
for (int i = 1; i <= n; i++) {
sum += i;
while (sum > n) {
sum -= min++;
}
if (sum == n) count++;
}
return count;
}
}
- 해당문제는 Kotlin 풀이를 지원하지 않으므로 해당코드를 Java로 변환하였습니다.
결과
'코틀린 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 신고 결과 받기(Kotlin) (0) | 2023.08.14 |
---|---|
[프로그래머스] - JadenCase 문자열 만들기(Kotlin) (0) | 2023.08.11 |
[프로그래머스] - 체육복(Kotlin) (0) | 2023.08.11 |
[프로그래머스] - 로또의 최고 순위와 최저 순위(Kotlin) (0) | 2023.08.10 |
[프로그래머스] - 개인정보 수집 유효기간(Kotlin) (0) | 2023.08.10 |