728x90
난이도 : 실버3
풀이일 : 07226
https://www.acmicpc.net/problem/3273
3273번: 두 수의 합
n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는
www.acmicpc.net
링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐
풀이 코드
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] nums = new int[n];
int count = 0;
for (int i = 0; i < n; i++) {
nums[i] = scan.nextInt();
}
int x = scan.nextInt();
int front = n-1;
int rear = 0;
// 배열 정렬
Arrays.sort(nums);
while (rear < front) {
// 두 수의 합이 x라면 count += 1, rear += 1
if (nums[front] + nums[rear] == x) {
count += 1;
rear += 1;
}
// 두 수의 합이 x보다 크다면 front -= 1
else if (nums[front] + nums[rear] > x) {
front -=1;
}
// 두 수의 합이 x보다 작다면 rear += 1
else {
rear += 1;
}
}
System.out.println(count);
}
}
- Arrays.sort(name) : name 이름의 배열 정렬
- 배열속 수 정렬 이후 제일 앞 수 (rear), 제일 뒷 수 (front)를 더해 주어진 숫자가 되는지 확인
- 주어진 수와 같다면 count 1 증가 후 꼬리 한칸 증가
- 주어진 수보다 합이 크다면 머리 한칸 감소
- 주어진 수보다 합이 작다면 꼬리 한칸 증가
느낀점
알고리즘 풀이를 위해 sort를 사용했지만, 파이썬으로 공부했던 정렬들을 자바로도 만들어봐야겠다.
'알고리즘 > 🥈 실버' 카테고리의 다른 글
백준 11659 구간 합 구하기 4 자바 풀이 (0) | 2023.08.20 |
---|---|
백준 1138 한 줄로 서기 자바 풀이 (0) | 2023.07.26 |
백준 1049 기타줄 자바 풀이 (0) | 2023.07.20 |
백준 11866 요세푸스 문제0 자바 풀이 (0) | 2023.07.09 |
백준 9095 1, 2, 3, 더하기 자바 풀이 (0) | 2023.07.09 |