현재

[Java][BaekJoon][10813] 공 바꾸기 본문

알고리즘/백준

[Java][BaekJoon][10813] 공 바꾸기

AAAge 2023. 9. 11. 17:46

<문제 의도>

배열에 값을 집어 넣고 배열값들을 바꿀 수 있냐는 문제이다.

 

<풀이 코드>

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 st = new StringTokenizer(br.readLine());


        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());


        int array [] = new int [N];

        for (int x = 0; x < N; x++){
            array [x] = x+1;
        }
       
        for (int x = 0; x < M; x++){
            st = new StringTokenizer(br.readLine());
            int i = Integer.parseInt(st.nextToken());
            int j = Integer.parseInt(st.nextToken());
            int tempArray = array[i-1];
            array[i-1] = array[j-1];
            array[j-1] = tempArray;
        }
       
        for ( int k : array ){
            System.out.print(k+" ");
        }
    }
}

<주의점>

이문제에서 크게 주의할 점이라고 하면 메모리 두개의 값만 가지고는 배열의 값을 바꿀 수 없다는것이다.

사람이라면 간단히 의자가 두개만 있어서 자리를 교체할 수 있지만, 컴퓨터는 그렇지않다.

예를들어 1번상자(검은색)에 2번상자(하얀색)의 색을 교체한다고 했을때, 

1번상자를 하얀색으로 칠하고 이제 1번 상자의 색을 2번상자에 입히려고 한다면, 이미 둘다 하얀색이어서 색을 입힐 수가 없다. 그래서 임시로 색을 입힐 상자를 준비해야한다. 미리 1번상자를 3번 상자에 검은색을 입히고, 2번상자의 하얀색을 1번상자에 입힌다. 그리고 3번상자의 색을 다시 2번상자에 입히는 식으로 하는 과정을 거쳐야한다.

이번 문제에서는 메모리는 단순히 교환만 불가능 하다는 점을 알 수 있었다.

 

<문제출처>

https://www.acmicpc.net/problem/10813

 

10813번: 공 바꾸기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 바구니에는 공이 1개씩 들어있고, 처음에는 바구니에 적혀있는 번호와 같은 번호가 적힌 공이

www.acmicpc.net