출처: 프로그래머스 코딩테스트 연습 <숫자의 표현>
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 조건을 잘 걸어서 효율성이 떨어지지 않게 주의하자!
'Programming > Programmers' 카테고리의 다른 글
[프로그래머스] 12985번 - 예상 대진표 (Java) (0) | 2023.06.12 |
---|---|
[프로그래머스] 43162번 - 네트워크 (JAVA) (0) | 2023.06.11 |
[프로그래머스] 12973번 - 짝지어 제거하기 (JAVA) (0) | 2023.06.08 |
[프로그래머스] 12945번 - 피보나치 수 (JAVA) (0) | 2023.06.07 |
[프로그래머스] 12911번 - 다음 큰 숫자 (JAVA) (2) | 2023.06.06 |