제목 : 바구니 뒤집기 (no.10811)
문제 출처
문제
도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2번째 바구니, ..., 가장 오른쪽 바구니를 N번째 바구니라고 부른다.
도현이는 앞으로 M번 바구니의 순서를 역순으로 만들려고 한다. 도현이는 한 번 순서를 역순으로 바꿀 때, 순서를 역순으로 만들 범위를 정하고, 그 범위에 들어있는 바구니의 순서를 역순으로 만든다.
바구니의 순서를 어떻게 바꿀지 주어졌을 때, M번 바구니의 순서를 역순으로 만든 다음, 바구니에 적혀있는 번호를 가장 왼쪽 바구니부터 출력하는 프로그램을 작성하시오.
Input
첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.
둘째 줄부터 M개의 줄에는 바구니의 순서를 역순으로 만드는 방법이 주어진다. 방법은 i j로 나타내고, 왼쪽으로부터 i번째 바구니부터 j번째 바구니의 순서를 역순으로 만든다는 뜻이다. (1 ≤ i ≤ j ≤ N)
도현이는 입력으로 주어진 순서대로 바구니의 순서를 바꾼다.
Output
모든 순서를 바꾼 다음에, 가장 왼쪽에 있는 바구니부터 바구니에 적혀있는 순서를 공백으로 구분해 출력한다.
Ex.Input 1
5 4
1 2
3 4
1 4
2 2
Ex.Output 1
3 4 1 2 5
Code
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner xx = new Scanner(System.in);
int index = xx.nextInt();
int deep = xx.nextInt();
int[] basket = new int[index];
// 바구니부터 만들기
for (int i = 0; i < index; i++) {
basket[i] = i+1;
}
// 바구니 숫자 바꾸기
for (int i = 0; i < deep; i++) {
int num1 = xx.nextInt();
int num2 = xx.nextInt();
// 인덱스 범위 내의 요소를 역순으로 바꾸기
reverseArray(basket, num1 - 1, num2 - 1);
}
// 결과물 출력
for (int i = 0; i < index; i++) {
System.out.print(basket[i] + " ");
}
}
// 숫자 바꾸기 매소드
public static void reverseArray(int[] array, int startIndex, int endIndex) {
while (startIndex < endIndex) { // 같으면 굳이 순서를 바꿀필요가 없으니 '<'를 사용했다.
int temp = array[startIndex];
array[startIndex] = array[endIndex];
array[endIndex] = temp;
startIndex++;
endIndex--;
}
}
}
처음엔 문제를 잘 이해 못하였다
단순하게 입력받은 인덱스값과 일치하는 값의 순서만 바꿔주는걸로만 생각하고 제출 하였는데
손코딩을 해보니 값이 다르게 나오는 것이였다
특히 2 2는 왜 넣었는지
2 3 이 들어가면 값이 맞을텐데 오타겠지~ 라는 말도안되는 의심으로 제출했다가 틀려버렸다.
그래서 크게 수정은 안했고 숫자 바꾸기에서 전체 숫자를 바꾸는 새로운 reverseArray 매소드만 호출했다.
자세한건 주석으로 달아 놓았고
변수명도 알아보기 쉽게 지정해놓아서 이해하는데에는 많은시간이 소모되지 않을거 같다
티스토리와 깃허브 홈
오류나 궁금하신점은
아래 댓글로 알려주시면 감사하겠습니다.
'백준' 카테고리의 다른 글
[JAVA] 백준 10813. (1) | 2023.10.05 |
---|---|
[JAVA] 백준 10951. (2) | 2023.10.04 |
[JAVA] 백준 10810. (0) | 2023.09.26 |
[JAVA] 백준 10818. (0) | 2023.09.25 |
[JAVA] 백준 2751. (0) | 2023.09.25 |