문제
문제 이해
5 4 : 5개의 바구니. 순서대로 1 2 3 4 5 의 번호가 적혀 있음. 4번 순서를 역순으로 바꾼다는 의미.
1 2 : 1번부터 2번까지 순서를 역순으로 바꿈. 2 1 3 4 5
3 4 : 3번부터 4번까지 순서를 역순으로 바꿈. 2 1 4 3 5
1 4 : 1번부터 4번까지 순서를 역순으로 바꿈. 3 4 1 2 5
2 2 : 그대로. 3 4 1 2 5 => 최종 출력 결과
문제 해결
우선 바구니의 개수 N과 역순으로 몇 번 바꾸는지를 나타내는 M을 입력 받고, 바구니 안에 숫자를 넣을 배열을 생성한다.
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int M = in.nextInt();
int arr[] = new int[N+1] //인덱스와 바구니 안의 숫자를 맞추기 위해 N+1
그리고 배열 안에 순서대로 숫자 넣깅
for(int i = 1; i <= N; i++) {
arr[i] = i;
}
★역순으로 바꿀 방법의 횟수 : M. 즉 역순으로 바꿀 범위 입력 받는 것과 역순으로 만드는 코드를 M번 반복하면 됨.★
for (int a = 0; a < M; a++) {
int i = in.nextInt(); //i번 바구니부터
int j = in.nextInt(); //j번 바구니까지
for(int b = i; b <= j; b++) { i번 바구니부터 j번 바구니까지 역순으로 바꾸는 코드
int c = j--; //후위연산.
int temp = arr[b];
arr[b] = arr[c];
arr[c] = temp; //arr[b]와 arr[c]를 바꾸는 연산
}
}
arr[b]와 arr[c]를 바꾸는 연산을 for문 조건에 맞을 동안 반복
그 후 최종 바구니에 들어있는 값을 출력해주면 끝
for (int i = 0; i < N; i++){
System.out.println(arr[i] + " ");
}
최종 코드import java.util.*; public class Main{ public static void main(String[] args) { Scanner in = new Scanner(System.in); int N = in.nextInt(); int M = in.nextInt(); int arr[] = new int[N+1]; for(int i = 1; i <= N; i++) { arr[i] = i; } for (int a = 0; a < M; a++) { int i = in.nextInt(); //i번 바구니부터 int j = in.nextInt(); //j번 바구니까지 for(int b = i; b <= j; b++) { //i번 바구니부터 j번 바구니까지 역순으로 바꾸는 코드 int c = j--; //후위연산. int temp = arr[b]; arr[b] = arr[c]; arr[c] = temp; //arr[b]와 arr[c]를 바꾸는 연산 } } for (int i = 0; i < N; i++){ System.out.print(arr[i] + " "); } } }
반응형
'백준 문제 풀이 > 1차원 배열' 카테고리의 다른 글
(#1546 Java) 평균 (0) | 2023.08.12 |
---|---|
(#3052 Java) 나머지 (0) | 2023.08.09 |
(#5597 Java) 과제 안 내신 분..? (0) | 2023.08.09 |
(#10813 Java) 공 바꾸기 (0) | 2023.08.08 |
(#10810 Java) 공 넣기 (0) | 2023.08.04 |