본문 바로가기

코딩테스트/programmers

숫자의 표현

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

연속된 자연수의 합이므로, 부분합을 응용했다.

 

1. 목표값보다 작으면 1씩 커지는 값을 더해주고

2. 목표값보다 커지면 더했던 값중 작은 값부터 1개씩 빼주었다.

 

 

class Solution {
    public int solution(int n) {
        
        int answer = 1;
        
        int left = 0, right = 0, sum = 0;
        
        while (right < n) {
            
            // 숫자를 1씩 늘려가며 더해줌
            sum += right++;
            
            if (sum == n) answer++;

            if (sum > n) {
                // 자연수 n보다 커지면 작은 수부터 하나씩 빼줌
                while (left < right && sum >= n) {
                    sum -= left++;
                    if (sum == n) answer++;
                }
            }
            
        }
        
        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;
        
    }
}

 

'코딩테스트 > programmers' 카테고리의 다른 글

리코쳇 로봇  (0) 2023.09.13
하노이의 탑  (0) 2023.09.12
이진 변환 반복하기  (0) 2023.09.11
올바른 괄호  (0) 2023.09.11
최솟값 만들기  (0) 2023.09.07