백준 - 투 포인터 1450 냅색 문제 / 문제풀이, 오답
= 내가 접근 방법 ( 틀림 ) = 처음 내가 접근한 방법은 부분합을 구할 때 사용한 알고리즘을 이용했다. 처음 합은 0 0
= 내가 접근 방법 ( 틀림 ) = 처음 내가 접근한 방법은 부분합을 구할 때 사용한 알고리즘을 이용했다. 처음 합은 0 0
= 내가 접근한 방법 = 1. 주어진 제한 시간은 1초, n의 범위를 생각하면 2중 for문으로는 분명히 시간 초과 ! 따라서 투 포인터 알고리즘 사용 2. 0번째 index 값과, n - 1번째 index값을 비교 합한 후, 절댓값을 씌우고 최솟값을 계속 갱신한다. 최솟값을 갱신하면서 index의 값도 갱신. = 내가 틀린 이유 = 1. 맨 처음 값과 맨 마지막 값의 합을 비교하면서 1-1. 0보다 클때, end값을 증가 1-2. 0보다 작을 때, start값을 증가 1-3. 0일 때, break; 라는 조건을 생각해야 되는데 절댓값을 씌운 상태에서 이 3가지 조건문을 사용했다. 절댓값이 없는 그냥 순수한 합을 통해서 이 3개의 조건문대로 움직였어야했는데 실수했다. 절댓값을 씌우고 if문이 진행이 되면..
= 내 접근 방법 ( 오답 ) = 흔히 사용하던 2중 for문을 사용했기 때문에 오답이다. 투 포인터 알고리즘은 언제 사용해야 될까? 문제를 잘 봐야한다. 시간 제한은 1초, n은 1000000이기 때문에 2중 for문을 이용한 단순한 코드는 O(N^2)이기 때문에 시간을 초과한다. 이러한 문제에 닥쳤을 때 투 포인터 알고리즘을 이용해서 해결해야 됨! https://byungil.tistory.com/193 이 링크에서 알고리즘에 대한 설명을 써놨다. = 알고리즘을 이용한 접근 ( 정답 ) = 1. 정렬된 배열이 필요. 2. 왼쪽 맨끝 과 오른쪽 맨끝에서 순차적으로 번갈아 가면서 접근 만족 => end-- or start++ 둘 중 하나, count++ 두 수의 합이 더 크면 end-- 두 수의 합이 더..