
1 ~ N번까지의 번호를 가진 바구니가 있다
M번의 바구니의 순서를 역순으로 만들 것이다
M번의 역순을 다 한 후, 바구니 번호를 왼쪽 부터 출력하는 문제 이다.
바구니의 개수 N = 5
역순의 개수 M = 4
1 2 3 4 5의 바구니가 있을 때
for(int i = 0; i < N; i++) {
arr[i] = i + 1;
}
while(front < end) {
int temp = arr[end];
arr[end] = arr[front];
arr[front] = temp;
front++;
end--;
}
💡 투 포인터는 양쪽 끝에서 시작해서 서로 마주 보는 방향으로 좁혀 오는 알고리즘
front는 오른쪽으로 이동end는 왼쪽으로 이동하면서 역순으로 표현하는 것
import java.io.*;
import java.util.*;
public class No_10811 {
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];
//1. 배열 저장
for(int i = 0; i < N; i++) {
arr[i] = i + 1;
}
//2. 역순 부분 입력
for(int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int front = Integer.parseInt(st.nextToken()) - 1;
int end = Integer.parseInt(st.nextToken()) - 1;
//3. 역순으로 표현 - 투 포인터 사용
while(front < end) {
int temp = arr[end];
arr[end] = arr[front];
arr[front] = temp;
front++;
end--;
}
}
//4. 마지막으로 저장된 배열 출력
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}