just do it

좋다/백준1253번/투포인터(java) 본문

자료구조&알고리즘/코딩테스트

좋다/백준1253번/투포인터(java)

밍풀 2022. 9. 24. 15:58

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package myapp;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
 
public class doit5 {
 
    public static void main(String[] args) throws IOException {
        BufferedReader bu = new BufferedReader(new InputStreamReader(System.in));
        
        int N= Integer.parseInt(bu.readLine());//한개만 읽어들이므로 스트링토크나이저 안씀
        long a[]=new long[N];
        
        StringTokenizer st = new StringTokenizer(bu.readLine());
        
        for (int i=0; i<10;i++) {//N개수 받아들인거 배열에 저장
            a[i]=Long.parseLong(st.nextToken());
        }
        
        Arrays.sort(a);//import로 배열해주는거 가져다씀
        int result =0;
        
        for(int k=0; k<N;k++) {
            long find = a[k];
            int i=0;
            int j=    N-1;
            while(i<j) {
                if(a[i]+a[j]==find) {
                    if(i!=&& j!=k) {
                        result++;
                        break;
                    }else if(i==k) {
                       i++;
                    }else if(j==k) {
                       j--;
                    }
                }else if(a[i]+a[j]<find) {
                    i++;
                }else {
                    j--;
                }
            }
            
        }
        System.out.println(result);
        bu.close();
        
        
        
 
 
 
    }
}
 
 
cs

a[i]+a[j]==find일때 조건문 이해하기

배열에 0을 포함했을때, 그리고 같은수가 있을때 이야기임

 

k=i인경우는 예를들어

-3     -3    -2    -1.5    0 인경우를 들 수 있음

k=0, i=0, j=4일때

맨앞 -3과 맨끝 0이 -3이 되지만 i, k가 같으므로 안됨

그치만 -3다음 -3이면 가능, 같은수라도 다른 자리에 있으면 다른수로 취급하므로.

i++ 해줌

 

만약 여기서 j--해줘버리면

-3 만드는데

-3 -1.5 선택해서 안되고 작으니까 i증가시켜

-3 -1.5 작으니까 i증가시켜

-2 -1.5 해서 끝까지 안만들어짐

 

그렇기도 하고 i=k인경우 j번째가 0이라는건데 같은수 i+1번째에 있을수있으니 이동

 

k=j인 경우는 예를들어

0 1 2 3 3 인경우

i=0, j=4, k=4일때

0+3=3이 되지만 j,k 겹치니까 안됨

이때 j=3일때는 똑같이 3이지만 마찬가지로 다른 수로 취급하므로 가능

j--해줌