import java.util.*;
public class Main {
public static void main(String[] args){
//N, M 받기
//길이가 N인 배열 선언, 1...N으로 초기화
//for문 M번 반복하며 i, j 받고, 범위 i~j를 역순으로 변경
//배열 출력
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
int[] arr = new int[N];
for(int i=0; i<N; i++) {
arr[i] = i+1;
}
for(int i=0; i<M; i++) {
int first = sc.nextInt()-1;
int last = sc.nextInt()-1;
while(first<last) {
int tmp = arr[first];
arr[first] = arr[last];
arr[last] = tmp;
first++;
last--;
}
}
for(int i=0; i<N; i++) {
System.out.print(arr[i] + " ");
}
}
}
Note
i~j 범위를 역순으로 정렬하는 코드 : i, j 범위에 따라 first, last를 바꾸는 횟수를 경우의 수로 나누어 구현하는 방식으로 접근했으나 실패
모든 경우의 수를 고려하지 않았다. (모든 경우의 수를 찾기가 쉽지 않았다)
코드 수정 시 문제에서 제시된 입력값과 출력값을 보고 그 경우에만 올바르게 출력되도록 했다.
경우의 수를 구하기 어려울 경우, 간단히 비교연산자를 사용하는 아이디어를 떠올리기
//틀린 코드
for(int p=0; p<M; p++) {
int i = sc.nextInt()-1;
int j = sc.nextInt()-1;
if((j-i)/2==0) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}else {
for(int q=0; q<=(j-i)/2+1; q++) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
if(j-i<=2)
continue;
}
}
}