본문 바로가기

알고리즘/🥈 실버

백준 3273 두 수의 합 자바 풀이

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를 사용했지만, 파이썬으로 공부했던 정렬들을 자바로도 만들어봐야겠다.