https://www.acmicpc.net/problem/1253
1253번: 좋다
첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)
www.acmicpc.net
저는 2중 for문을 통해 풀었습니다.
저는 입력값 + 입력값 = 입력값 (좋은수) 이기 때문에 이를 입력값(좋은수) - 입력값 = 입력값으로 생각했습니다.
그래서 해당 입력값이 있는지를 확인하여 문제를 풀었습니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
public class Test {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] num = new int[n];
for(int i = 0 ; i < n ; i++){
num[i] = Integer.parseInt(st.nextToken());
}
int result = cal(num,n);
System.out.println(result);
}
private static int cal(int[] num, int n) {
// Arrays.sort(num);
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0 ; i < n ; i++){
map.merge(num[i],1,(v1,v2)->{
return v1+1;
});
}
int cnt = 0;
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < n ; j++){
if(i == j){
continue;
}
int tempNum = num[i] - num[j];
if(map.containsKey(tempNum)){
int tempCnt = map.get(tempNum);
if(num[i] == tempNum){
tempCnt--;
}
if(num[j] == tempNum){
tempCnt--;
}
if(tempCnt > 0){
cnt++;
break;
}
}
}
}
return cnt;
}
}
'알고리즘' 카테고리의 다른 글
백준 1654번 랜선 자르기 (JAVA) (1) | 2023.12.11 |
---|---|
백준 1914번 하노이 탑 (JAVA) (1) | 2023.12.10 |
백준 2667번 단지번호붙이기 (JAVA) (2) | 2023.12.08 |
백준 10162번 전자레인지 (JAVA) (1) | 2023.12.07 |
백준 수들의 합5 (JAVA) (2) | 2023.12.06 |