반응형
백준 xxxx.
https://www.acmicpc.net/problem/3273

Key Point
투 포인터
정렬
Git
https://github.com/dev-jinius/Algorithm-Practice
처음 풀이 시도
( 40 min / 성공 )
- 문제를 보고 초등학생 때 배웠던 가우스 덧셈 방식이 떠올랐다. 1 ~ 100까지 덧셈을 가장 빨리 구했다는..
- 어떻게? 이미 1~100은 정렬되어 있어 (1+100), (2+99), (3+98) .. (49+52) (50+51) 이런식으로 짝지어서 50쌍이 만들어지니까 101 * 50 = 5050
- 이 문제도 1 ~ 100 덧셈처럼 무조건 등차수열은 아니기 때문에 딱 떨어지지 않을 수 있다. 그래도 앞뒤로 짝지어서 시간복잡도 O(n)으로 구할 수 있다.
- 먼저 주어진 숫자들을 자료구조 리스트에 넣고 정렬을 했다.
- 리스트 맨앞에서부터 탐색하는 포인터 p1과 맨뒤에서부터 탐색하는 포인터 p2를 두고, 포인터를 움직이면서 짝을 지어 합한다. => 투 포인터 사용
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
list.add(scanner.nextInt());
}
int target = scanner.nextInt();
scanner.close();
Collections.sort(list);
int p1 = 0;
int p2 = n-1;
int count = 0;
while (p1 < p2) {
int n1 = list.get(p1);
int n2 = list.get(p2);
if (n1+n2 > target) {
p2--;
continue;
}
if (n1+n2 < target) {
p1++;
continue;
}
p1++;
p2--;
count++;
}
System.out.println(count);
}
}반응형
'알고리즘' 카테고리의 다른 글
| [백준 1931][실버1] 회의실 배정 - 그리디 알고리즘 (0) | 2024.07.27 |
|---|---|
| [Leetcode 1338] Reduce Array Size to The Half - 그리디 알고리즘 (0) | 2024.06.30 |
| 99클럽 코테 스터디 28일차 TIL - 힙 (0) | 2024.06.27 |
| 99클럽 코테 스터디 27일차 TIL - 스택/큐 (0) | 2024.06.23 |
| 99클럽 코테 스터디 24일차 TIL - DFS (0) | 2024.06.19 |
