목록두 포인터 (10)
기록방
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nZe0S/btrSBnI3Mbj/4tUcaWgX9oMC8lUz9Q96j1/img.png)
👉 문제링크 4158번: CD 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 상근이가 가지고 있는 CD의 수 N, 선영이가 가지고 있는 CD의 수 M이 주어진다. N과 M은 최대 백만이다. 다음 줄 www.acmicpc.net 🔸 문제 분석 🔸 n과 m이 입력되면 n개의 수와 m개의 수가 입력되고 겹치는 숫자의 개수를 출력한다. 오름차순 정렬된 수가 입력되므로 투 포인터 알고리즘을 사용해 풀이한다. 0 0이 입력 될 때까지 반복한다. 🔸 코드 🔸 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; import ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/buxAdT/btrPy9871XJ/6oRE1FWBpRbGxSPf2AVo4k/img.png)
👉 문제링크 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 🔸 문제 분석 🔸 n개의 숫자의 합으로 m을 만들 수 있는 경우의 수를 출력한다. m은 3억이므로 int형으로 충분하다. n개의 수의 합이 m이 되는지 매번 더해서 확인하면 시간초과가 날 것이다. 따라서 미리 누적 합 리스트 sum를 만들어 둔다. 인덱스 i부터 인덱스 j 까지의 합은 sum[j] - sum[i] 로 구할 수 있다. sum[0]은 0이다. sum[j] - sum[i] > m이면, 계속 커지는 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/pKGHS/btrMUgbBs3o/aDFB78q5Uxr1qHoCICqZs0/img.png)
👉 문제링크 1253번: 좋다 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) www.acmicpc.net 🔸 문제 분석 🔸 N개의 수에서 서로 다른 두 수로 만들 수 있는 수의 개수를 출력한다. 인덱스가 다르면 값이 같아도 다른 수이다. 시간 복잡도 N의 개수가 최대값 2,000이라 가정해도 좋은 수 하나를 찾는 알고리즘의 시간 복잡도는 N^2보다 작아야 한다. (N^2 를 사용하면 다시 N번 반복해서 최종 시간 복잡도는 N^3가 되기 때문) 좋은 수 하나를 찾는 알고리즘은 최소 O(nlongn)이어야 한다. 정렬과 투 포인터 알고리즘 사용 단, 정렬된 데이터에서 자기 자신을 좋은..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bjBTlo/btrMUgWRkek/cmvFVUo5kljrJ3M2NNkZV1/img.png)
👉 문제링크 1940번: 주몽 첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고 www.acmicpc.net 🔸 문제 분석 🔸 n개의 수를 입력받고, 그 중에 2개의 합이 m이 되는 경우의 수를 출력한다. 🔸 코드 🔸 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nxpZG/btrMUFon8yM/BbPMN7SlQMJxAPi6D1UQE1/img.png)
👉 문제링크 2018번: 수들의 합 5 어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한 www.acmicpc.net 🔸 문제 분석 🔸 1부터 N이하의 수들의 합이 N이 나오는 경우의 수를 출력한다. 🔸 코드 🔸 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) th..