[백준:2309] 일곱 난쟁이 (JAVA)

dev_kiiim·2022년 11월 29일
0

CODING TEST

목록 보기
12/23
post-thumbnail

이 문제는 사실 어제(28일) 풀다가 자꾸 틀려서 오늘 다시 풀어보는 것이다,,😅


public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int[] arr = new int[9];
    int[] out = new int[7];
    for(int i=0; i<9; i++){
        arr[i] = input.nextInt();
    }

    for(int i=0; i<3; i++){
        for(int j=1; j<4; j++){
            for(int k=2; k<5; k++){
                for(int l=3; l<6; l++){
                    for(int m=4; m<7; m++){
                        for(int n=5; n<8; n++){
                            for(int o=6; o<9; o++){
                                if(arr[i]+arr[j]+arr[k]+arr[l]+arr[m]+arr[n]+arr[o] == 100){
                                    out = new int[]{arr[i], arr[j], arr[k], arr[l], arr[m], arr[n], arr[o]};
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    Arrays.sort(out);
    System.out.println(Arrays.toString(out));
}

일단 어제 풀다 만 코드는 이렇다,,ㅎ
브루트 포스로 분류되어 있어서 그냥 for문을 일곱번 돌리면서 풀어놨는데
오늘 다시 생각해보니 for문을 이렇게 돌리면 중복되는 인덱스가 나오기때문에 틀렸던 것이었다.


#2022.11.29#

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int[] arr = new int[9];
    int[] out = new int[7];
    for(int i=0; i<9; i++){
        arr[i] = input.nextInt();
    }

    for(int i=0; i<3; i++){
        for(int j=i+1; j<4; j++){
            for(int k=j+1; k<5; k++){
                for(int l=k+1; l<6; l++){
                    for(int m=l+1; m<7; m++){
                        for(int n=m+1; n<8; n++){
                            for(int o=n+1; o<9; o++){
                                if(arr[i]+arr[j]+arr[k]+arr[l]+arr[m]+arr[n]+arr[o] == 100){
                                    out = new int[]{arr[i], arr[j], arr[k], arr[l], arr[m], arr[n], arr[o]};
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    Arrays.sort(out);
    for(int i=0; i<7; i++){
        System.out.println(out[i]);
    }
}

for문의 조건을 이전 for문의 초기값에서 +1한 값을 초기값으로 주었다.
이렇게 하면 중복되는 인덱스없이 동작이 가능하다.

사실 이렇게 풀기 전에 ArrayList로 푸는 방법도 생각했는데
뭔가 될듯하면서 자꾸 안되는것이,,, 아주 서터레스다,,😞
주말이나 시간날 때 더 풀어보고 추가로 기록할 수 있도록 해야겠다

0개의 댓글