본문 바로가기
PS/BOJ

백준 14911 자바 - 궁합 쌍 찾기 (BOJ 14911 JAVA)

by Nahwasa 2021. 12. 15.

문제 : boj14911

 

 

1.

  주어지는 수의 개수가 주어지지 않으므로 입력받기 전에 총 배열의 크기를 알 수 없다. 미리 최대 개수 배열을 만들어 입력받은 후 처리하거나, 자바의 split 합수를 사용해 처리하면 된다.

 

 

2. 

  최대 개수가 10개밖에 안되므로 모든 경우의 수를 보면 된다. 다만 주의점은 사전 순으로 출력해야 한다는 부분인데, 이를 위해 정렬 후 모든 경우를 보면 된다. 또한 문제에 명시적으로 나타나진 않았으나, '사전 순으로 앞서는 기준은 a < c이거나, a == c 이면서, b < d 인 것' 에 따라 a==c이면서 b==d인 경우는 정의되지 않은 것을 알 수 있다. 따라서 서로 다른 쌍이라 할지라도, 동일한 출력값은 출력하면 안된다. 예를들어 입력이

1 1 1 1 1

2

와 같을 경우 아래와 같이 출력해야 한다.

1 1

1

이 부분은 해싱을 통해 처리하면 된다.

 

 

코드 : github

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;

public class Main {
    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] tmp = br.readLine().split(" ");
        int[] arr = new int[tmp.length];
        for (int i = 0; i < tmp.length; i++)
            arr[i] = Integer.parseInt(tmp[i]);

        int sum = Integer.parseInt(br.readLine());
        Arrays.sort(arr);
        StringBuilder sb = new StringBuilder();
        int cnt = 0;
        HashSet<String> dupChk = new HashSet<>();
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = i+1; j < arr.length; j++) {
                if (arr[i] + arr[j] == sum) {
                    String str = arr[i] + " " + arr[j];
                    if (dupChk.contains(str)) continue;
                    dupChk.add(str);
                    sb.append(str).append('\n');
                    cnt++;
                }
            }
        }
        sb.append(cnt);
        System.out.println(sb);
    }

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글