코딩테스트/투포인터 3

[투포인터] (백준_2470) 두 용액

📌 링크: https://www.acmicpc.net/problem/2470 📌 총평: 이문제 이진탐색으로 분류되어있는데 낚시다. 투포인터 문제다. 📌 헷갈렸던 부분:✅ 이 문제는 양쪽 끝을 계속해서 비교하는 문제여서, 핵심은 양끝의 합 >0 이면 오른쪽-=1, 양끝의 합 나는 양끝의 합의 부호를 기준으로 보지 않고 바로 직접값이랑 합의 값을 비교해서 틀렸다. abs(arr[s] + arr[e-1]) 왜 절댓값 비교를 하면 안되냐하면, 값이 수렴하지 않고 진동할 수 있기 때문이다. 현재 수렴해야하는 값은 양끝의 합=0이 되는 것,즉, 0으로 값이 수렴해야하므로 0이 기준이 되어야한다. 그래서 0보다 합이 크면 합을 줄이는 쪽인 왼쪽-=1 ~ 이런식으로 왼쪽,오른쪽 값을 조절하는 거다. ✅ 절댓값을..

[투포인터] (프로그래머스_178870) 연속된 부분 수열의 합

📌 링크: https://school.programmers.co.kr/learn/courses/30/lessons/178870 📌 틀렸던 이유:✅ 초기화 부분을 start,end=0,0으로해야하는데 start(합의 조건이 무조건 두개이상의 원소는 아님)✅ sum_value를 먼저 정해주고 while을 돌려야 정확하게 조건에서 걸리는데 while문 이후에 정해줘서 로직이 꼬였음 📌 알고리즘:1️⃣  start_idx, end_idx, sum_value=0,0,0으로 초기화해준다.마지막에 가장 길이가 짧은 수열의 처음,시작 인덱스를 반환해야하므로 힙을 활용한다.from heapq import heappop,heappushdef solution(sequence, k): start_idx,end_id..

[투포인터] (이론+문제) 특정한 합을 가지는 부분 연속 수열 찾기

📌 투포인터 알고리즘이란?리스트에 순차적으로 접근해야할때 2개의 점의 위치를 기록하면서 처리하는 알고리즘 📌 어떤 경우 쓰일까?ex) 특정한 합을 가지는 부분 연속 수열 찾기 (대표적) 📌 알고리즘1️⃣ 시작점(start)과 끝점(end)이 첫번째 원소 인덱스(0)를 가르키도록함2️⃣  while 현재 부분합이 M보다 작으면 end를 증가시킴 (부분합이 M보다 같거나 크기 전까지)3️⃣ 부분합이 M이랑 같으면 카운트함4️⃣ 부분합에서 시작점(start)의 원소를 제거  5️⃣ 시작점(start) 인덱스를 1증가 2️⃣~5️⃣  반복 📌 기본 코드n = 5 #데이터 개수 Nm = 5 #찾고자 하는 부분합 Mdata = [1,2,3,2,5]count = 0end = 0interval_sum = 0fo..