프로그래머스_숫자의 표현

LeeYulhee·2023년 9월 7일
0

💻 문제 출처 : 프로그래머스_숫자의 표현

👉 내가 작성한 답


class Solution {
    public int solution(int n) {
        int answer = 0;
        
        for(int i = 1; i <= n; i++) {
            if(n % i == 0) {
                answer++;
            }
            n = n - i;
        }
        
        return answer;
    }
}
  • 📌 접근 방식
    • 연속된 수의 합에는 2개의 수를 더하는 값은 2씩 증가, 3개의 수를 더하는 값은 3씩 증가, 4개의 수를 더하는 값은 4씩 증가하는 식의 규칙이 있음
    • 다만 시작하는 수(i를 연속으로 더한 최소 수)가 1, 3, 6, 10…로 바뀜
    • n에서 i를 빼면서 계산 ⇒ 첫 순회에서는 1을 빼고, 그 다음 순회에서는 2를 빼고, 그 다음 순회에서는 3을 빼며 누적으로 빼고, 다음 단계로 넘어가 i로 나누면 나머지 없이 나누어 떨어짐
      • ⇒ 연속되는 수를 더한 최소 값은 앞의 최소 값에서 해당 단계를 더한 값
      • ⇒ 전 단계의 최소 값을 빼고 i(연속되는 수의 개수)를 나누면 나누어 떨어짐
  • 📌 문제 풀이 설명
    • int 변수 anwer를 선언하고 0으로 초기화
    • for문으로 1부터 n 이하까지 1씩 증가하며 순회
      • 만약 n을 i로 나눈 나머지가 0이면
        • answer에 1 증가
      • n에 n - i를 대입
    • for문 종료 후 return answer



👉 다른 사람이 작성한 답


class Solution {
    public int solution(int n) {
        int answer = 0;
        for (int i = 1; i <= n; i += 2) {
           if (n % i == 0) 
               answer++;
        }
        
        return answer;
    }
}
  • 📌 접근 방식
    • 주어진 자연수를 연속된 자연수의 합으로 표현하는 방법의 수는 주어진 수의 홀수 약수의 개수와 같다라는 정수론 정리가 있음
  • 📌 문제 풀이 설명
    • int 변수 answer 선언 후 0으로 초기화
    • for문으로 1부터 n 이하까지 2씩 증가하며 순회
      • 만약 n을 i로 나눈 나머지가 0이면
        • answer에 1 증가
    • for문 종료 후 return answer
profile
공부 중인 신입 백엔드 개발자입니다

0개의 댓글