728x90
[풀이1]
[예시1]
int i=1, int j=3 일 경우 (범위가 홀수일 경우)
1. arr[0] = arr[2]
2. arr[1] = arr[1]
3. arr[2] = arr[0]
- 1번부터 3번까지 횟수로는 3번이지만 실제로 1,3번은 서로 바뀌바뀌며, 2번은 같은 값이니 총 1번만 바꾸면 됨
[예시2]
int i=1, int j=4 일 경우 (범위가 짝수일 경우)
1. arr[0] = arr[3]
2. arr[1] = arr[2]
3. arr[2] = arr[1]
4. arr[3] = arr[0]
- 1번부터 4번까지 횟수로는 4번이지만 실제로 1,4번과 2,3번은 서로 바뀌니 총 2번만 바꾸면 됨
따라서 반복문 길이는 ((j-i)+1)/2이다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
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 k=0; k<N; k++){
arr[k] =k+1;
}
for(int k=0;k<M;k++){
st = new StringTokenizer(br.readLine());
int i = Integer.parseInt(st.nextToken());
int j = Integer.parseInt(st.nextToken());
int num = ((j-i)+1)/2;
for(int n=0;n<num;n++){
int temp;
temp = arr[i-1+n];
arr[i-1+n] = arr[j-1-n];
arr[j-1-n] = temp;
}
}
for(int k=0;k<arr.length;k++){
bw.write(arr[k]+" ");
}
br.close();
bw.flush();
bw.close();
}
}
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[백준/2908] 상수 - 문자열 역순 (Java) (0) | 2025.01.02 |
---|---|
[백준/10809] 알파벳 찾기 (Java) (0) | 2025.01.02 |
[백준/3052] 나머지 (Java) (1) | 2024.12.27 |
[백준/5597] 과제 안 내신 분..? (Java) (0) | 2024.12.27 |
[백준/10813] 공 바꾸기 (Java) (0) | 2024.12.24 |