🔺 문제
2018번: 수들의 합 5
어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한
www.acmicpc.net
🔺 코드
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int start_idx = 1;
int end_idx = 1;
int cnt = 1; // 가지수
int sum = 1;
while(end_idx != N) {
if(sum == N) { // 현재 연속 합이 N과 같은 경우
cnt++;
end_idx++;
sum += end_idx;
}
else if(sum < N) {
end_idx++;
sum += end_idx;
}
else if(sum > N) {
sum -= start_idx;
start_idx++;
}
}
System.out.println(cnt);
}
}
✅ 해결 아이디어
- 투 포인터 ! (시작점, 끝점 위치의 처음 위치가 같음)
[투 포인터 이동 원칙]
• sum == N인 경우 ⇨end_idx++; sum += end_idx; cnt++;
• sum > N인 경우 ⇨ sum -= start_idx; start_idx++;
(= 왼쪽 값 삭제)
• sum < N인 경우 ⇨ end_idx++; sum += end_idx;
(= 오른쪽으로 한 칸 확장)
🔺 다른 풀이들
[JAVA] 백준 2018번- 수들의 합 5
https://www.acmicpc.net/problem/2018 2018번: 수들의 합 5 어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자
yeoncoding.tistory.com
[투 포인터, JAVA] 백준 - 2018
문제: https://www.acmicpc.net/problem/2018 2018번: 수들의 합 5 어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속
life-study-1031.tistory.com
백준 BaekJoon 2018번: 수들의 합 5 [Java] 자바
2020-12-09 문제 어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1≤N≤10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알
seeminglyjs.tistory.com
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 1253번: 좋다 (0) | 2023.04.03 |
---|---|
[백준/JAVA] 1940번: 주몽 (0) | 2023.04.03 |
[백준/JAVA] 11660번: 구간 합 구하기 5 (0) | 2023.04.03 |
[백준/JAVA] 11659번: 구간 합 구하기 4 (0) | 2023.04.03 |
[백준/JAVA] 2798번: 블랙잭 (0) | 2023.04.01 |