투 포인터 알고리즘을 적용하되 저번에 풀었던 문제들은 두 개의 배열에 각각의 포인터를 두는 방식이여서 하나의 배열의 투 포인터 알고리즘은 어떻게 적용해야할지 고민이 되었다.
💪 새롭게 배운 내용
투포인터 알고리즘과 슬라이딩 윈도우 알고리즘을 함께 사용할 수 있다는 사실 ?
🆘 이해가 어려운 내용
왜 맞는 정답이 나오지 않는지 궁금해서 인강으로 확인해 봤는데, 강사님은 right Pointer 를 나처럼 변수로 설정하지 않고, 그냥 for 문에서 선언한 뒤 하나 씩 더해가면서 반복문을 돌렸다. 어떻게 이런 생각을 해내는가 ,,ㅋㅋ
❌ 해결하지 못한 이유
예제 문제 Output 은 3이 나와야하는데 계속 2가 나온다 ㅠㅠ..
인강으로 확인해봤는데 거의 비슷한데 왜 2가 나오는지 아직 모르겠다.
✅ 본인 풀이
🏋️♀️ 시도횟수 : n회 | ⏱ 걸린시간 : 100ms | 💾 메모리 : 100MB
package study.section3;
import java.util.Scanner;
public class Section0304Answer {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
int answer = solution(arr, m);
System.out.println(answer);
}
private static int solution(int[] arr, int m) {
int sum = 0;
int count = 0;
int left = 0;
int right = 0;
// TODO left, right Pointer 필요
// 위 문제와 다르게 한 줄 배열에서는 투포인터, 슬라이딩을 섞어써야하는 듯
// 탈출 조건식은 배열 크기까지만 돌도록 설정
while (right < arr.length) {
sum += arr[right];
right++;
if (sum == m) {
count ++;
right ++;
}
while (sum > m) {
sum -= arr[left++];
if (sum == m) {
count ++;
}
}
}
return count;
}
}
📌 문제
⭐️ 아이디어
🤔 고민한 내용
💪 새롭게 배운 내용
🆘 이해가 어려운 내용
❌ 해결하지 못한 이유
✅ 본인 풀이
🏋️♀️
시도횟수
: n회 | ⏱걸린시간
: 100ms | 💾메모리
: 100MB참고한 자료