문제
설명
새 학기가 시작되었습니다. 철수는 새 짝꿍을 만나 너무 신이 났습니다.
철수네 반에는 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
내 풀이
import java.util.Scanner;
public class Main6_6 {
public int[] Solution(int n, int[] arr) {
int[] answer = new int[2];
for (int i = 1; i < n-1; i++) {
if(answer[0]==0) {
if(arr[i]>arr[i-1] && arr[i]>arr[i+1])
answer[0] = i+1;
}
if(arr[i]<arr[i-1] && arr[i]<arr[i+1])
answer[1] = i+1;
}
return answer;
}
public static void main(String[] args) {
Main6_6 T = new Main6_6();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
for(int x : T.Solution(n, arr))
System.out.print(x + " ");
}
}
사실 문제 이해가 잘 안된 상태로 풀긴 했는데,,, 전체 5개 중 2개의 테스트케이스에 대해 실패했다
정해진 문제 풀이를 배열 전체에 규칙화 시켜서 답을 찾아내는 게 아직 어려운 것 같다.
선생님 풀이
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main6_6 {
public ArrayList<Integer> Solution(int n, int[] arr) {
ArrayList<Integer> answer = new ArrayList<>();
int[] tmp = arr.clone();
Arrays.sort(tmp);
for (int i = 0; i < n; i++) {
if(tmp[i]!=arr[i]) answer.add(i+1);
}
return answer;
}
public static void main(String[] args) {
Main6_6 T = new Main6_6();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
for(int x : T.Solution(n, arr))
System.out.print(x + " ");
}
}
원래는 오름차순으로 있어야 되니까 배열을 복사해서 오름차순으로 정렬하면 답지가 된다.
이제 문제 배열을 정답 배열과 비교해서 다른 부분만 쏙쏙 골라내면 된다. 크으,,,
결과
'Algorithm > Inflearn' 카테고리의 다른 글
[Inflearn] 자바 알고리즘 문제풀이 #06-09 9. 뮤직비디오(결정 알고리즘) (0) | 2023.03.04 |
---|---|
[Inflearn] 자바 알고리즘 문제풀이 #06-07 7. 좌표 정렬 (0) | 2023.02.23 |
[Inflearn] 자바 알고리즘 문제풀이 #06-05 5. 중복 확인 (0) | 2023.02.14 |
[Inflearn] 자바 알고리즘 문제풀이 #06-04 4. Least Recently Used(캐시) (0) | 2023.02.13 |
[Inflearn] 자바 알고리즘 문제풀이 #06-03 3. 삽입 정렬 (0) | 2023.02.11 |