JAVA/알고리즘

철수 짝궁 번호 출력

lovineff 2021. 6. 8. 09:32

새 학기가 시작되었습니다. 철수는 새 짝꿍을 만나 너무 신이 났습니다.
철수네 반에는 N명의 학생들이 있습니다.
선생님은 반 학생들에게 반 번호를 정해 주기 위해 운동장에 반 학생들을 키가 가장 작은 학 생부터 일렬로 키순으로 세웠습니다.
제일 앞에 가장 작은 학생부터 반 번호를 1번부터 N번까지 부여합니다. 철수는 짝꿍보다 키가 큽니다.
그런데 철수가 앞 번호를 받고 싶어 짝꿍과 자리를 바꿨습니다. 선생님은 이 사실을 모르고 학생들에게 서있는 순서대로 번호를 부여했습니다.
철수와 짝꿍이 자리를 바꾼 반 학생들의 일렬로 서있는 키 정보가 주어질 때 철수가 받은 번호와 철수 짝꿍이 받은 번호를 차례로 출력하는 프로그램을 작성하세요.

▣ 입력설명
첫 번째 줄에 자연수 N(5<=N<=100)이 주어진다.
두 번째 줄에 제일 앞에부터 일렬로 서있는 학생들의 키가 주어진다. 키(높이) 값 H는 (120<=H<=180)의 자연수 입니다.
▣ 출력설명
첫 번째 줄에 철수의 반 번호와 짝꿍의 반 번호를 차례로 출력합니다.
▣ 입력예제 1
9
120 125 152 130 135 135 143 127 160
▣ 출력예제 1
3 8
출력해설 : 키 정보 152가 철수이고, 127이 철수 짝꿍입니다.
▣ 입력예제 2
6
120 130 150 150 130 150
▣ 출력예제 2
3 5

 

public static void main(String[] args) {
    int N = 9;
//        int[] arr = new int[]{120,125,152,130,135,135,143,127,160};
    int[] arr = new int[]{120,130,150,150,130,150};

    int[] solution = solution(N, arr);
    for (int i : solution) {
        System.out.print(i + " ");
    }
}

private static int[] solution(int N, int[] arr) {
    int chulsuIndex = -1;
    int friendIndex = -1;

    // 짝꿍을 먼저 찾고 그 값으로 철수를 찾는다.
    for (int i = 0; i < arr.length-1; i++) {
        // 마지막에 키가 작아지는 구간이 있으면 친구이다.
        if(arr[i] > arr[i+1]){
            friendIndex = i+1;
//                System.out.println("friend " + arr[i] + ":" + arr[i+1]);
        }
    }

    // 친구 키
    int friendTall = arr[friendIndex];
    System.out.println("friendTall = " + friendTall);

    // 친구의 키 값으로 철수의 위치를 찾는다.
    for (int i = 0; i < friendIndex ; i++) {
        // 키가 작아지면 친구이다.
        if(friendTall < arr[i]){
            chulsuIndex = i;
            System.out.println("arr[chulsuIndex] = " + arr[chulsuIndex]);
            break;
        }
    }

     return new int[]{chulsuIndex + 1, friendIndex + 1};
}

'JAVA > 알고리즘' 카테고리의 다른 글

이진탐색  (0) 2021.06.08
좌표정렬  (0) 2021.06.08
배열 중복 검사  (0) 2021.06.07
LSU 알고리즘  (0) 2021.06.07
공주 구하기  (0) 2021.06.02