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

최지나·2023년 11월 1일
1

코딩테스트

목록 보기
63/154

문제

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

입출력 예

nresult
154

문제 출처

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

생각

  • 1부터 n까지 중에 연속적 자연수들을 합쳐서 n이 나올려면, n 자기 자신을 제외하고서는 가장 큰 시작 점이 n/2이기에, 반복을 1부터 n/2 까지 진행
  • 합이 n이 되면 count 를 증가, 합이 n 이상이면 break;
  • 마지막에 n = n인 경우 (ex 15 = 15) 를 더해주자

코드

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

다른 사람의 풀이

public class Expressions {
    public int expressions(int num) {
    int answer = 0;

    int sum;
    for(int i = 1 ; i <= num ; i++) {
      sum = 0;
      for(int j = i ; j <= num ; j++) {
        sum += j;
        if(sum == num) {
          answer++;
          j = num+1;
        }
      }
    }
    return answer;
    }
}
  • 반복을 n/2번까지만 하고 , n = n 인 경우를 따로 더해준 나의 풀이와 달리, n까지 다 반복해서 한 번에 처리한 코드를 기록한다
  • 속도 측면에서는 조금 더 느리지만, 가독성이나 읽고 로직을 파악하는 데 있어서는 장점이 있는 코드라고 생각했다 🧐🧐
profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

0개의 댓글