공부하기/백준

[Java] 백준 풀기 1940 - 주몽

XEV 2024. 4. 29. 21:32

자바 백준 1940번

실버 4

https://www.acmicpc.net/problem/1940

 

 

 

 

 

문제 보기

분류: 정렬, 두 포인터

 

 

 

 

 

코드 폴이

import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 재료의 개수 N과 갑옷을 만드는데 필요한 수 M을 입력
int N = sc.nextInt();
int M = sc.nextInt();
// 재료의 고유한 번호들을 저장할 배열
int[] materials = new int[N];
// 재료의 고유한 번호들을 입력받아 배열에 저장
for (int i = 0; i < N; i++) {
materials[i] = sc.nextInt();
}
// 재료의 번호를 오름차순으로 정렬
Arrays.sort(materials);
// countArmors 메서드를 호출하여 갑옷을 만들 수 있는 경우의 수를 계산
int count = countArmors(materials, M);
// 결과 출력
System.out.println(count);
}
// 갑옷을 만들 수 있는 경우의 수를 계산하는 메서드
private static int countArmors(int[] materials, int M) {
int count = 0;
int left = 0;
int right = materials.length - 1;
// 두 포인터를 사용하여 갑옷을 만들 수 있는 경우의 수를 계산
while (left < right) {
int sum = materials[left] + materials[right];
if (sum == M) {
// 갑옷을 만들 수 있는 경우의 수 증가
count++;
left++;
right--;
} else if (sum < M) {
// 합이 M보다 작으면 왼쪽 포인터를 오른쪽으로 이동
left++;
} else {
// 합이 M보다 크면 오른쪽 포인터를 왼쪽으로 이동
right--;
}
}
return count;
}
}