[프로그래머스] 숫자의 표현 (Java)

SeongWon Oh·2021년 9월 9일
0
post-thumbnail

🔗 문제 링크

https://programmers.co.kr/learn/courses/30/lessons/12924


👨🏻‍💻 내가 작성한 코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        for (int i=1; i<= n; i++){
            int result = 0;
            int adder = i;
            
            while (result <= n){
                result += adder;
                if (result == n){
                    answer++;
                    break;
                } 
                else adder++;
            }
        }
        return answer;
    }
}

👨🏻‍💻 다른 사람이 작성한 코드

public class Expressions {

    public int expressions(int num) {
        int answer = 0;
        for (int i = 1; i <= num; i += 2) {
            if (num % i == 0) {
                answer++;
            }
        }
        return answer;
    }

    public static void main(String args[]) {
        Expressions expressions = new Expressions();
        // 아래는 테스트로 출력해 보기 위한 코드입니다.
        System.out.println(expressions.expressions(15));
    }
}

코드 설명!
> 주어진 자연수를 x라 하고, a, b, c, d, k, n은 자연수라고 가정 
1) x를 홀수개의 연속된 자연수의 합으로 표현할 수 있는 경우 
1: b => 1*b [, b >= 1] 
3: b-1, b, b+1 => 3*b [, b >= 2] 
2a-1: b-(a-1), … b,, b+(a-1) => (2a-1)*b [, b >= a] 

2) x를 짝수개의 연속된 자연수의 합으로 표현할 수 있는 경우 
2: d-1, d => 1*(2d-1) [, d >= 2] 
4: d-2, d-1, d, d+1 => 2*(2d-1) [, d >= 3] 
2d: d-c,, d,, d+(c-1) => c*(2d-1) [, d >= c+1] 

3) 1)2)를 합쳐서 표현하면 x = (2k-1)n [, n>=k이면 홀수개]


📝 결론

연산이 적은 코드를 작성하려면 어느정도 문제를 수학적으로 생각하며 풀어야하는 것 같다.
고등학교 이후 수학을 별로 접하지 않아 수학능력이 현재 많이 떨어졌으나 효율성이 높은 코드를 구현하려면 수학 공부도 필요할 것 같다.😥

profile
블로그 이전했습니다. -> https://seongwon.dev/

0개의 댓글