10811번: 바구니 뒤집기
도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2
www.acmicpc.net
문제는 간단하다. 바구니의 숫자는 기본적으로 1,2,3,4 순서대로 설정되어있다는 것. - 첫번째 포인트
두 숫자를 입력받으면 그 숫자의 범위대로 바구니의 순서를 reverse한다. - 두번째 포인트
이 두가지를 집중해서 코드를 짜면 되겠다고 생각했다.
첫번째 포인트는 for문으로 그냥 1번 인덱스에는 1, 2번엔 2 .. 이런식으로 설정하면 끝
두번째 포인트가 관건이다. array에서 순서를 바꾸는것은 그렇게 어렵지가 않다는 것을 잘 알수있다. 바로 temp 변수를 활용하여 순서를 바꾸고는 하는데, 여기서는 범위내에있는 순서를 계속 바꿔야한다.
즉 temp 변수를 활용하는것을 여러번 해야한다는 것이 포인트이다. 여러번 할때의 조건은 바뀔 인덱스의 위치가 왼쪽 인덱스가 오른쪽 인덱스보다 작은 상태여야한다는 것이다.
상태에 만족하는 반복문? while이 조금 더 적합하다고 판단하였고 while 반복문과 temp변수를 활용한 순서바꾸기가 핵심이겠다.
여기서 끝나면 안되겠다. 마지막 포인트는 2 2 와 같이 같은 인덱스를 줬을때는? 의미가 딱히 없겠다. 따라서 이는 조건문에 따로 달아두어 어떠한 기능도 하지않게 control 하면 문제는 끝
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int 바구니 = sc.nextInt();
int 횟수 = sc.nextInt();
int[] arr = new int[바구니+1];
//바구니에 숫자주기. default.
for(int i=1; i<=바구니; i++) {
arr[i] = i;
}
//
for(int i=0; i<횟수; i++) {
int first = sc.nextInt();
int last = sc.nextInt();
//2,2일 경우 굳이 바꿀 필요가 x
if(first == last) {
continue;
}
else {
while(first<last) {
int temp = arr[first];
arr[first] = arr[last];
arr[last] = temp;
first++;
last--;
}
}
}
for(int i=1; i<바구니+1; i++) {
System.out.print(arr[i]+" ");
}
sc.close();
}
'Algorithm_PS' 카테고리의 다른 글
백준_2745 <진법 변환> (1) | 2023.10.26 |
---|---|
백준_2563 <색종이> (0) | 2023.10.20 |
백준_10798(세로읽기) (0) | 2023.10.19 |
백준_2941(크로아티아 알파벳) (0) | 2023.10.18 |
백준_25206 (너의 평점은) (1) | 2023.10.16 |