[단계별로 풀어보기] 10811번 바구니 뒤집기 (1차원 배열)

Jun_Gyu·2023년 3월 14일
0

BackJoon Online Judge

목록 보기
9/18
post-thumbnail

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {


	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer str = new StringTokenizer(br.readLine(), " ");

		int N = Integer.parseInt(str.nextToken());
		int M = Integer.parseInt(str.nextToken());
		int[] arr = new int[N];

		for (int x = 0; x < N; x++) { // arr[] = [1,2,3,4,5]
			arr[x] = x + 1; //
		}
		for (int x = 0; x < M; x++) {
			str = new StringTokenizer(br.readLine(), " ");
			int i = Integer.parseInt(str.nextToken()); // 1
			int j = Integer.parseInt(str.nextToken()); // 5

			int[] arr2 = new int[N];
			for (int y = 0; y < N; y++) { // 0부터 
				arr2[y] = arr[y];
			}
				for (int y = i - 1; y <= j; y++) {
					int tmp[] = new int[j - i + 1];
					tmp[j - y] = arr[y];
				}
		}
		for (int x = 0; x < N; x++) {
			System.out.print(arr[x] + " ");
		}
	}
}

위의 문제를 푸는데 있어 배열을 두개 생성하여 하나의 배열에 역순을 적용하여 적용된 배열을 다른 배열에 복사하는 방법을 사용하기위해서 코드를 구현하려 했다.

값을 입력받고 출력하는 부분은 코드를 구현하였으나, 역순으로 배열에 적용하는 부분에서 다소 어려움에 부딪혀, ChatGPT에 현재 풀고자 하는 문제와 내가 구성한 코드를 입력하여 풀이법의 피드백을 받았다.

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer str = new StringTokenizer(br.readLine(), " ");

		int N = Integer.parseInt(str.nextToken());
		int M = Integer.parseInt(str.nextToken());
		int[] arr1 = new int[N];

		for (int x = 0; x < N; x++) {
			arr1[x] = x + 1;
		}
		for (int x = 0; x < M; x++) {
			str = new StringTokenizer(br.readLine(), " ");
			int i = Integer.parseInt(str.nextToken());
			int j = Integer.parseInt(str.nextToken());

			int[] arr2 = new int[N]; // 값을 복사해올 2번째 배열 생성
			for (int y = 0; y < N; y++) { 
				arr2[y] = arr1[y]; // 현재 arr1의 값을 arr2로 복사해옴. 
				// (매 M번마다 반복해서 arr2배열을 arr1의 값으로 update해주기 위함.)
			}
			for (int y = i - 1; y < j; y++) { // 역순을 적용 할 i부터 j까지의 범위를 반복 
				arr2[y] = arr1[(i + j) - 2 - y]; 
			} 
			/* [ex)i=1,j=4 (0부터 3까지 반복)]
			 *  arr2[0] = arr1[3], arr2[1] = arr1[2], 
			 *  arr2[2] = arr1[1], arr2[3] = arr1[0] 
			 */
			// arr2는 현재 역순으로 정렬이 완료된 상황.
			arr1 = arr2; // arr1값에 arr2의 값을 대입함.
		}
		for (int x = 0; x < N; x++) {
			System.out.print(arr1[x] + " ");
		}

profile
시작은 미약하지만, 그 끝은 창대하리라

0개의 댓글