두 수의 합 다국어
1 초 | 128 MB | 60882 | 21756 | 15995 | 34.300% |
문제
n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 (ai, aj)쌍의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 수열의 크기 n이 주어진다. 다음 줄에는 수열에 포함되는 수가 주어진다. 셋째 줄에는 x가 주어진다. (1 ≤ n ≤ 100000, 1 ≤ x ≤ 2000000)
출력
문제의 조건을 만족하는 쌍의 개수를 출력한다.
예제 입력 1 복사
9
5 12 7 10 9 1 2 3 11
13
예제 출력 1 복사
3
알바 끝나고 오면 너무 피곤해서 일단 문제라도 읽어보기로 결정
진심 왜케 피곤하지?
정처기 공부도 해야 하는데 하하하하하하하하하하하하하기싫어
일단 코드를 대충 돌려놓은 담에 알바하면서 시루를 하는 거다. 이클립스로 틀을 짜놓고 백준에서 돌려서 틀렸습니다! 를 본 담에 알바 가서 시간 날 때마다 수정해서 돌려보는 거지 하하하하하하하하ㅏㅎ
n개의 서로 다른 양의 정수로 이루어진 수열이 있는데.... 그 수열의 값들은 1 <= ai <= 1000000 이고 자연수 x가 주어졌을 때.. ai + aj = x를 만족하는 쌍의 수를 구하라고? 이걸 어떻게 ㄱ구해
수열 크기 n... 수열 포함 수... 셋째줄 x...
글고 사람들이 StringBuilder로 받아와서 int로 바꾸던데 그게 더 좋은 건가? <- 지금은 찾기 귀찮고 내일 시루로 찾아봐야겠다^^
대충 짜본 1차 코드
import java.util.Arrays;
import java.util.Scanner;
public class BJ_3273 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 수열 크기 n
int[] nums = new int[n]; // n 크기의 int 배열
for (int i = 0; i < n; i++) {
nums[i] = sc.nextInt();
}
int x = sc.nextInt(); // 자연수 x
Arrays.sort(nums); // 배열 오름차순 정렬
int count = 0; // 결과 저장 변수
for (int i = 0; i < n; i++) {
// nums[i]가 x보다 크다면 for문 탈출
if (nums[i] >= x) {
break;
}
// 바로 뒤에 거부터 더해보자..
for (int j = i + 1; j < n; j++) {
// nums[i] + nums[j]가 x면 count 더해주고 탈출
if (nums[i] + nums[j] == x) {
count++;
break;
}
// i + j가 x보다 크면 그냥 나가자
else if (i + j > x) {
break;
}
}
}
System.out.println(count);
sc.close();
}
}
오늘은(아직 잠 안 잤으니까 대충 오늘로 칠게요) 틀렸습니다 대신 다른 문구만 계속 보는 중
역시 for문을 두 번 돌린 게 문제인가? 근데 for문 두 개 돌리는 거 밖에 생각이 안 나는데 탈출 조건을 많이 넣어봐야 하나 ㅎㅎ
이거 올리고 바로 문제를 찾았다. 실수로 nums[i] + nums[j]로 해야 하는 걸 i + j로 해버림,,
import java.util.Arrays;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 수열 크기 n
int[] nums = new int[n]; // n 크기의 int 배열
for (int i = 0; i < n; i++) {
nums[i] = sc.nextInt();
}
int x = sc.nextInt(); // 자연수 x
Arrays.sort(nums); // 배열 오름차순 정렬
int count = 0; // 결과 저장 변수
for (int i = 0; i < n; i++) {
// nums[i]가 x보다 크다면 for문 탈출
if (nums[i] >= x) {
break;
}
// 바로 뒤에 거부터 더해보자..
for (int j = i + 1; j < n; j++) {
// nums[i] + nums[j]가 x면 count 더해주고 탈출
if (nums[i] + nums[j] == x) {
count++;
break;
}
// nums[i] + nums[j]가 x보다 크면 그냥 나가자
else if (nums[i] + nums[j] > x) {
break;
}
}
}
System.out.println(count);
sc.close();
}
}
또이잉 됐다!!!! 시간은... 눈을 감고 싶다
하하하 그러면 내일 알바 갔다 와서 다음 꺼도 해봐야지~~~~~
'백준 풀기' 카테고리의 다른 글
백준 15656번: N과 M (7) with Java (3) | 2024.07.16 |
---|---|
백준 11478번: 서로 다른 부분 문자열의 개수 with Java (1) | 2024.07.14 |
백준 15655번: N과 M (6) with Java (0) | 2024.07.12 |
백준 1004번: 어린 왕자 with Java (0) | 2024.07.11 |
백준 2559번: 수열 with Java (0) | 2024.07.07 |