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

SeongWon Oh·2021년 9월 9일
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개의 댓글