코딩 테스트
[코딩테스트] 백준 10811번: 바구니 뒤집기
dev.jelee
2025. 5. 24. 02:32
# 문제
- 주소: https://www.acmicpc.net/problem/10811
- N개의 바구니를 M번 반복하는데, i번부터 j번까지의 바구니를 뒤집기.
# 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String[] input = br.readLine().split(" ");
int N = Integer.parseInt(input[0]); // 바구니 몇 개
int M = Integer.parseInt(input[1]); // 몇 번 반복
int[] basket = new int[N];
int[] dummy = new int[basket.length]; // dummy 바구니 만들기.
for (int i = 0; i < basket.length; i++) {
basket[i] = i + 1; // 바구니 번호 지정.
dummy[i] = i + 1;
}
// 바구니 뒤집기 계산
for (int m = 0; m < M; m++) { // 반복 횟수
String[] nums = br.readLine().split(" ");
int i = Integer.parseInt(nums[0]) - 1;
int j = Integer.parseInt(nums[1]) - 1;
int x = j; // j값 임시 저장.
while (i <= j) {
dummy[x] = basket[i]; // 더미에 바구니 값 저장.
i++;
x--;
}
for (int k = 0; k < basket.length; k++) { // 바구니에 더미 값 저장.
basket[k] = dummy[k];
}
}
for (int num : basket) {
bw.write(num + " ");
}
bw.flush();
bw.close();
br.close();
}
}
# 입/출력 결과
# 과정
- BufferedReader + InputStreamReader 클래스를 사용하여 입력값 받기.
- BufferedWriter + OutputStreamWriter 클래스 사용하여 출력.
- String[] input에 바구니 개수와 반복 횟수 값 받아서 공백 기준으로 나누기.
- int N과 int M에 input 배열 요소 각각 담기.
- int[] basket과 int[] dummy를 생성. 배열 길이는 int N만큼.
- for문 사용해서 바구니 번호 지정해주기. (index + 1)
- for문 사용해서 바구니 뒤집는 계산하기.
- : M만큼 반복하기.
- : 반복 할 때마다 입력값 2개 받아서 공백 기준으로 나누기.
- : 나눈 값은 각각 int i와 int j에 저장을 하는데 -1 해주기. (index 때문에)
- : int x를 생성해서 j의 값을 임시 저장하기.
- : while문 사용해서 i번~ j번까지의 바구니들을 뒤집는 식 만들기.
- : dummy[] 바구니에 기존 바구니의 번호 담기.
- : ex) dummy[0] = basket[1], dummy[1] = basket[0] 이런 식.
- : 그 다음 다시 for문을 사용해서 기존 바구니에 dummy 바구니 값 저장하기.
- for-each문과 bw.write() 사용해서 basket에 있는 값 출력하기.
# 느낀 점
- 이전 문제 보다는 시간이 덜 걸렸다. 바구니 안에서 뒤집고 싶었는데 계속 원하는 답이 나오지 않았다.
- 그래서 결국에는 임시 바구니를 만들어서 뒤집은 바구니를 다시 담고 임시 바구니의 값들을 다시 기존 바구니에 담는 형식으로 하는 것이 최선이었다.
- chat-gpt한테 내 코드를 주면서 효율적으로 변경해달라고 하니 swap 되는 코드로 만들어줬다.
- 나도 swap 식으로 되게 코드를 작성했었는데 자꾸 원하는 답이 안 나와서 결국 방식을 바꾼 거였는데, 보니 값을 잘못 지정해줬었던 거였다. 으아... 문제가 조금이라도 꼬아져있으면 버벅거리게 된다. 에휴...