본문 바로가기
Programming/Programmers

[프로그래머스] 12924번 - 숫자의 표현 (JAVA)

by duoxi 2023. 6. 5.

출처: 프로그래머스 코딩테스트 연습 <숫자의 표현>

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

 

프로그래머스

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

programmers.co.kr


문제

 

 

풀이

  • 연속된 자연수들의 합으로 표현해야 하기 때문에 1부터 하나씩 증가하면서 더해줍니다. 단, n을 넘어서 더하는 것은 자연수의 합으로 n을 표현하는 방법이 아니기 때문에 n까지만 더합니다. 
  • 그 합이 n과 같다면 n을 연속된 자연수들로 표현한 것이기 때문에 answer을 1 추가합니다.
  • 합이 n을 넘어간다면 연속된 자연수의 합으로 n을 표현할 수 없는 것이기 때문에 다음으로 넘어갑니다.

 

소스코드

class Solution {
	public int solution(int n) {
		int answer = 0;

		// i부터 연속된 수의 합을 구하기
		for(int i=1; i<=n; i++){
			int sum = 0;
            
			// 숫자를 하나씩 더하다가
			for(int j=i; j<=n; j++){
				sum += j;
                
				// 합이 n과 같아지면 연속된 자연수로 표현 가능한 것
				if(sum == n){
					answer ++;
					break;
				}
				// 합이 n보다 커지면 연속된 자연수로 표현 불가능, 다음으로 넘어가기
				else if(sum > n){
					break;
				}
			}
		}
		return answer;
	}
}

 

시행착오 ..

더보기

코드를 작성할 때, 연속된 숫자(j)가 증가하는 조건을 주지 않아서 효율성 검사에서 통과하지 못했다.

정확하게는 처음엔 통과했는데 같은 코드로 다시 돌려보니까 통과하지 못함 .. 아마 첫번째 시도는 얻어걸린 것 같다.

 


반복문으로 코드 작성할 때는 반드시 break 조건을 잘 걸어서 효율성이 떨어지지 않게 주의하자!