ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 3273 두 수의 합 #JAVA
    Algorithm Solving/BAEKJOON 2021. 1. 16. 00:56

     

    BAEKJOON [3273] 두 수의 합?


    코드


    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.StringTokenizer;
    
    public class Main {
    
    	public static void main(String[] args) throws NumberFormatException, IOException {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    		int n = Integer.parseInt(br.readLine());
    		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
    		int x = Integer.parseInt(br.readLine());
    		int count = 0;
    		int[] arr = new int[n];
    		
    		for (int i = 0; i < n; i++) {
    			arr[i] = Integer.parseInt(st.nextToken());
    		}
    		
    		// 정렬함-> 경우의 수를 줄일 수 있음.
    		Arrays.sort(arr);
    		
    		int startIdx = 0;
    		int endIdx = n-1;
    		
    		while (startIdx < endIdx) {
    			int sum = arr[startIdx] + arr[endIdx];
    			if(sum == x) {
    				count++;
    				endIdx--;
    				startIdx++;
    			}
    			else if(sum > x) endIdx--;	//합계가 x 보다 크면 종료인덱스  감소
    			else if(sum < x) startIdx++;	//합계가 x 보다 작으면 시작인덱스 증가
    			
    		}
    		
    		System.out.println(count);
    		
    	}
    
    }
    

     

     

     

    풀이


    • 정렬 후 수의 조합 계산 시 시간복잡도를 줄 일 수 있다.

     

     


    잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)

     

     

    'Algorithm Solving > BAEKJOON' 카테고리의 다른 글

    [백준] 1406 에디터 #JAVA  (0) 2021.01.24
    [백준] 18258 큐2 #JAVA  (0) 2021.01.24
    [백준] 1919 애너그램 만들기 #JAVA  (0) 2021.01.15
    [백준] 11328 Strfry #JAVA  (0) 2021.01.15
    [백준] 1182 부분수열의 합 #JAVA  (0) 2021.01.15

    댓글