✔ 숫자의 표현
문제 분석하기
투 포인터를 이용해 연속적인 숫자의 합으로 만들 수 있는 경우를 모두 구하도록 함
손으로 풀어보기
- 투포인터를 이용해 연속적인 숫자의 합을 구함
- 연속적인 숫자의 합이 n보다 작다면 끝 포인터를 증가시킴
- 연속적인 숫자의 합이 n보다 크다면 시작 포인터를 증가시킴
- 연속적인 숫자의 합이 n과 같다면 방법 횟수를 증가시키고 끝 포인터를 증가시킴
- 방법 횟수를 반환
슈도코드 작성하기
n(자연수)
answer(연속된 자연수들로 n을 표현하는 방법의 수)
start(시작 포인터)
end(끝 포인터)
sum(연속된 자연수들의 합)
while(right가 n이 아닌 동안) {
if(sum이 n과 같다면) {
answer 증가, end 증가, sum값 변경
}
else if(sum이 n보다 크다면) {
sum 값 변경, start 증가
}
else {
end 증가, sum 값 변경
}
}
answer 반환
코드 구현하기
/**
* 12924) 숫자의_표현
*/
public class L013_12924 {
// n(자연수)
public int solution(int n) {
// answer(연속된 자연수들로 n을 표현하는 방법의 수)
int answer = 1;
// start(시작 포인터)
int start = 1;
// end(끝 포인터)
int end = 1;
// sum(연속된 자연수들의 합)
int sum = 1;
// right가 n이 아닌 동안
while (end != n) {
// sum이 n과 같다면
if (sum == n) {
// answer 증가, end 증가, sum값 변경
answer++;
end++;
sum = sum + end;
}
// sum이 n보다 크다면
else if (sum > n) {
// sum 값 변경, start 증가
sum = sum - start;
start++;
}
// sum이 n보다 작다면
else {
// end 증가, sum 값 변경
end++;
sum = sum + end;
}
}
// answer 반환
return answer;
}
// 테스트 케이스
public static void main(String[] args) {
L013_12924 solution = new L013_12924();
int n = 15;
int result = solution.solution(n);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[12939] 최댓값과 최솟값 (0) | 2024.01.08 |
---|---|
[12936] 줄 서는 방법 (0) | 2024.01.07 |
[12923] 숫자 블록 (0) | 2024.01.03 |
[12914] 멀리 뛰기 (0) | 2024.01.03 |
[12913] 땅따먹기 (0) | 2024.01.03 |