문제 : 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();
}
}
'PS > BOJ' 카테고리의 다른 글
백준 3011 자바 - 이름 지어주기 (BOJ 3011 JAVA) (0) | 2021.12.17 |
---|---|
백준 12834 자바 - 주간 미팅 (BOJ 12834 JAVA) (0) | 2021.12.16 |
백준 23716 자바 - Transform the String (BOJ 23716 JAVA) (0) | 2021.12.14 |
백준 9327 자바 - 용량 확보 (BOJ 9327 JAVA) (0) | 2021.12.13 |
백준 9213 자바 - 꽤 좋은 수 (BOJ 9213 JAVA) (0) | 2021.12.13 |
댓글