본문 바로가기

Algorithm/level2

[ 프로그래머스 - Java & Kotlin ] 숫자의 표현 ( 자바 & 코틀린 )

728x90

( 연습문제 / 숫자의 표현 )

[문제]

문제 설명

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 이하의 자연수 입니다.

입출력 예시

n return
15 4

[풀이]

i를 1부터 n / 2까지 반복문을 돌면서 i부터 1씩 증가하는 j를 n이 될 때까지 더해서 더한 결과가 n이면 answer를 1씩 증가시켜 주면 됩니다.

여기서 answer를 1로 설정한 이유는 숫자의 표현이 n으로 시작해서 아무런 덧셈 없이 끝나는 경우는 항상 있기 때문입니다.

추가로 두번의 합으로 n이 표현 가능한 경우까지만 반복문을 돌리면 됨으로 i를 n/2까지만 반복을 진행하면 됩니다.

 

이번 문제의 경우는 n이 비교적 작은 10,000 이하의 수이고 i > n/2 일 경우 while문이 바로 끝나기 때문에 상관은 없습니다. 때문에 반복문을 n까지 돌려도 충분히 효율성 테스트를 통과할 수 있습니다.

n까지(왼쪽), n/2까지 (오른쪽)


[코드]

자바

class Solution {
    public int solution(int n) {
        int answer = 1;
        
        for(int i = 1; i <= n / 2; i++){
            int result = 0;
            int j = i;
            while(result < n) result += j++;
            if(result == n) answer++;
        }
        
        return answer;
    }
}

코틀린

fun solution(n:Int):Int{
    var answer = 1

    for(i in 1..n/2){
        var result = 0
        var j = i
        while(result < n){ result += j++ }
        if(result == n) answer++
    }

    return answer
}

문제 링크

 

코딩테스트 연습 - 숫자의 표현

Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할

programmers.co.kr

제가 잘못 알고 있거나 잘못된 부분이 있을 경우 알려주시고 추가로 궁금한 점 있으신 분들도 댓글이나 메일 주시면 성실히 답변해 드리겠습니다.🧑🏻‍💻

감사합니다~😄

728x90