곽로그
[백준 10811, JAVA] 바구니 뒤집기 본문
반응형
문제
https://www.acmicpc.net/problem/10811
풀이
문제에서 주어지는 i번째와 배열의 index만 잘 구분하면 쉽게 풀 수 있는 문제다. 컨셉은, 원래의 배열에서 i번째 부터 j번째 원소를 입력받을 새로운 배열을 만든 다음, 이 새로운 배열의 역순부터 0번째까지의 원소를 원래배열에 다시 복사 해 놓는 것이다.
길이가 n인 배열(가)의 a번째 부터 b번째 까지의 원소를 거꾸로 뒤집는 다고 가정하자
(여기서 주의할 점은 a가 배열의 인덱스로 치환 될 수 있도록, 입력받은 숫자에서 -1 을 해야한다)
1) 길이가 b-a+1인 새로운 배열(나)를 생성한다
2) (가)배열의 index =a 부터 index= b까지의 원소를 (나)배열의 0번째 부터 b-a까지 복사 한다
3) (나)배열의 index= b-a 부터 index=0번째 까지의 원소를 (가)배열의 index = a 부터 index =b 까지 복사한다
코드
import java.io.*;
import java.util.StringTokenizer;
public class baekjoon10811 {
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 ;
int n,m;
int a,b;
int[] originArray;
int[] tempArray;
st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
//초기 배열 셋팅
originArray = new int[n];
for(int i =0; i<n; i++){
originArray[i] = i+1;
}
//swap작업을 m번 반복
for(int i =0; i<m; i++){
st = new StringTokenizer(br.readLine());
a = Integer.parseInt(st.nextToken())-1;
b = Integer.parseInt(st.nextToken())-1;
//길이가 b-a +1 인 배열 생성
tempArray = new int[b-a+1];
//원래 배열의 index=a 부터 index=b 까지 임시배열에 복사
for(int j = a; j<=b ;j++){
tempArray[j-a] = originArray[j];
}
//임시배열의 끝에서부터 0번째 인덱스원소를 원래 배열의 a번째 인덱스 부터 b번째 인덱스 까지 복사
for(int j= b-a; j>=0; j--){
originArray[b-j] = tempArray[j];
}
}
//출력
for(int i =0; i<originArray.length;i++){
bw.write(originArray[i]+" ");
}
bw.flush();
}
}
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 2444, JAVA] 별 찍기 -7 (0) | 2023.03.21 |
---|---|
[백준 25083, JAVA] 새싹 ( java escape 문자) (0) | 2023.03.19 |
[백준 2460 | java, python] 주사위 세개 (0) | 2022.04.22 |
[백준 2525, python] 오븐 시계 (0) | 2022.04.14 |
[백준2588 python] 곱셈 (0) | 2022.04.14 |
Comments