백준 10811
백준 10811 문제
import java.io.*;
import java.util.*;
public class Boj10811 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = i + 1;
}
for (int k = 0; k < m; k++) {
st = new StringTokenizer(br.readLine());
int i = Integer.parseInt(st.nextToken()) - 1;
int j = Integer.parseInt(st.nextToken()) - 1;
while (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
풀이
- 이 문제는 투포인터 알고리즘을 이용하여 주어진 범위의 양 끝의 인덱스를 서로 바꿔주고, 범위를 좁혀가면서 바꿔주면 된다.
- 입력받은 범위값인
i와 j는 실제 인덱스보다 1씩 크기 때문에 -1를 해준다.
- 역순으로 배치를 할 떄에 범위
i가 j보다 커질 수 없기 때문에 i < j를 조건으로 반복한다.
temp 변수에 배열 i의 값을 담아둔다.
- 배열
i에 배열 j의 값을 담는다.
- 배열
j에 temp의 값을 담는다.
i값은 증가, j값은 감소시킨다.
- 반복문을 끝나면 배열의 값을 출력한다.