| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 개발자
- 프로그래머스
- 스프링부트
- 연관관계
- spring boot
- queue
- JPA
- error
- ORM
- SpringBoot
- LinkedList
- 자료구조
- restTemplate
- QueryDSL
- 백엔드공부
- TestCode
- actuator
- 백엔드스쿨
- 컴퓨터 구조
- 백엔드
- SpringSecurity
- spring
- 제로베이스
- Java
- 컴퓨터 공학
- 서버
- 백준
- array
- JWT
- 핵심가이드
Archives
- Today
- Total
be_better
[백준] 2003번 - 수들의 합 2 본문
목차
💎 문제 링크
2003번: 수들의 합 2
첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.
www.acmicpc.net
📝 문제

✍🏻 입력 & 출력


🤔 풀기 전에 생각하기
투 포인터를 사용하면 쉽게 해결되는 문제
✨ 풀이
import java.util.Scanner;
public class bj2003_수들의합2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int M = scanner.nextInt();
int[] numbers = new int[N];
for (int i = 0; i < N; i++) {
numbers[i] = scanner.nextInt();
}
int count = 0; // 수들이 합이 M과 같을 때 count 증가
int sum = 0; // 연속된 수들의 합
int p1 = 0; // 앞에서 나아갈 포인터
int p2 = 0; // 뒤에서 쫓아갈 포인터
while (true) {
if (sum > M) { // 합이 M보다 커지면
sum -= numbers[p2++]; // p2를 증가시키면서 앞에서 부터 하나씩 빼준다.
} else if (p1 == numbers.length) { // 앞에서 나아가는 p1이 배열의 끝에 도달하면 break
break;
} else {
sum += numbers[p1++]; // 배열의 끝이 아니고 합이 M보다 아직 작다면 p1증가시키면서 숫자 합산
}
if (sum == M) { // 합이 M과 같은 순간에 count 증가
count++;
}
}
System.out.println(count);
}
}'코딩테스트 > 백준' 카테고리의 다른 글
| [백준] 11725번 - 트리의 부모 찾기 (1) | 2023.08.22 |
|---|---|
| [백준] 10807번 - 개수 세기 (0) | 2023.08.15 |
| [백준] 2830번 - 행성 X3 (0) | 2023.08.15 |
| [백준] 24174번 - 힙 정렬 2 (0) | 2023.08.13 |
| [백준] 1158번 - 요세푸스 문제 (0) | 2023.08.11 |