728x90
처음 내가 생각한 건 리스트에 바구니 번호들을 넣어놓고
temp라는 리스트를 만들어서 인덱스만큼 쏙 빼서 역순 정렬하고 원본 리스트 인덱스에 맞게 다시 끼워넣기 !
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
class Main{
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());//바구니를 역순으로 만들 방법
List <Integer>list = new ArrayList<>();
List <Integer>temp = new ArrayList<>();
for(int i=1;i<=N;i++) {
list.add(i);
}
for(int i =0;i<M;i++) {
st = new StringTokenizer(br.readLine());
int j = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int g = 0;
int c = 0;
temp.clear();
for(int m=j-1;m<k;m++) {
temp.add(g,list.get(m));
g++;
}
for(int f=temp.size()-1;f>0;f--) { //temp 리스트에서 범위 숫자 역순 정렬
temp.add(c,temp.get(temp.size()-1));
temp.remove(temp.size()-1);
c++;
}
for(int n = 0;n<temp.size();n++)
list.set((j-1+n),temp.get(n));
}
for(int i=0;i<list.size();i++)
System.out.print(list.get(i)+" ");
}
}
근데 그냥 배열로 해서 바꾸는 방식도 있어서 함 해봤다
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
class Main{
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 i =0;i<M;i++) {
st = new StringTokenizer(br.readLine());
int j = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int temp = 0;
while(true) {
temp = arr[j-1];
arr[j-1] = arr[k-1];
arr[k-1] = temp;
j++;
k--;
if(j>k)break;
}
}
for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+" ");
}
}
코드는 훨씬 간단 !
시간은 비슷 ~.~
자꾸만 더 쉬운 방법이 없나 고민해봐야겠다
728x90
'알고리즘 > 백준' 카테고리의 다른 글
10988번 문제 : 팰린드롬인지 확인하기 (0) | 2023.04.25 |
---|---|
2444번 문제 : 별 찍기 - 7 (0) | 2023.04.24 |
10926번 문제 : ??! (0) | 2023.04.15 |
4949번 문제 : 균형잡힌 세상 (0) | 2023.04.15 |
2869번 문제 : 달팽이는 올라가고 싶다 (0) | 2023.04.14 |