[BAEKJOON] 배열 10813번 - 공 바꾸기

밍챠코·2024년 4월 6일
0

BAEKJOON

목록 보기
36/38

📝[10813]

[Java]

1. Scanner 이용

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int N = sc.nextInt(); // 바구니 개수(배열의 크기)
        int M = sc.nextInt(); // 공 바꾸는 횟수
        int[] arr = new int[N];
        
        // 배열 초기화(바구니와 같은 번호의 공 담기)
        for(int k = 0; k < N; k++) { // 배열의 index는 0부터 시작
            arr[k] = k + 1; // index에서 +1을 해줘야 공 번호(=바구니 번호)가 됨
        }
        
        for(int l = 0; l < M; l++) {
            int i = sc.nextInt();
            int j = sc.nextInt();
            
            int temp = arr[i - 1];
            arr[i - 1] = arr[j - 1];
            arr[j - 1] = temp;
        }
        
        for(int x = 0; x < N; x++){
            System.out.print(arr[x] + " "); // System.out.printf("%d ", arr[x]);
        }
        
        /*
        for(int basket : arr){
            System.out.print(basket + " ");
        }
        */
        
        sc.close();
    }
}

🌟 swap 알고리즘 : 서로 위치를 바꾸는 알고리즘
📎 temp 변수를 활용한 임시공간 할당방식이 가장 대중적으로 쓰이는 방법
: temp에 a의 값을 저장하고 a에는 b의 값을 저장하고 b에는 다시 temp에 임시할당한 값을 넣어서 바꾸는 방식
❗️temp 변수는 빈 병이라고 생각하면 됨. 두 컵의 내용물을 서로 바꾸고 싶을 때, 내용물이 섞이지 않기 위해 사용되는 용도

2. BufferedReader/StringTokenizer 이용

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[] arr = new int[N];
        
        // 배열 초기화(바구니와 같은 번호의 공 담기)
        for(int k = 0; k < N; k++) { // 배열의 index는 0부터 시작
            arr[k] = k + 1; // index에서 +1을 해줘야 공 번호(=바구니 번호)가 됨
        }
        
        for(int l = 1; l <= M; l++) {
            st = new StringTokenizer(br.readLine());
            int i = Integer.parseInt(st.nextToken());
            int j = Integer.parseInt(st.nextToken());
            
            int temp = arr[i - 1];
            arr[i - 1] = arr[j - 1];
            arr[j - 1] = temp;
        }
        
        for(int x = 0; x < N; x++){
            System.out.printf(arr[x] + " ");
        }
        
        br.close();
    }
}

3. BufferedReader/StringBuilder 이용

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[] arr = new int[N];
        
        // 배열 초기화(바구니와 같은 번호의 공 담기)
        for(int k = 0; k < N; k++) { // 배열의 index는 0부터 시작
            arr[k] = k + 1; // index에서 +1을 해줘야 공 번호(=바구니 번호)가 됨
        }
        
        for(int l = 1; l <= M; l++) {
            st = new StringTokenizer(br.readLine());
            int i = Integer.parseInt(st.nextToken());
            int j = Integer.parseInt(st.nextToken());
            
            int temp = arr[i - 1];
            arr[i - 1] = arr[j - 1];
            arr[j - 1] = temp;
        }
        
        StringBuilder sb = new StringBuilder();
        for(int x = 0; x < N; x++){
            sb.append(arr[x] + " "); //sb.append(arr[x]).append(" "); 
        }
        System.out.print(sb);
        
        br.close();
    }
}

4. BufferedReader/BufferedWriter 이용

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

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));
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        int N = Integer.parseInt(st.nextToken()); // 바구니 개수(배열의 크기)
        int M = Integer.parseInt(st.nextToken()); // 공 바꾸는 횟수
        int[] arr = new int[N];
        
        // 배열 초기화(바구니와 같은 번호의 공 담기)
        for(int k = 0; k < N; k++) { // 배열의 index는 0부터 시작
            arr[k] = k + 1; // index에서 +1을 해줘야 공 번호(=바구니 번호)가 됨
        }
        
        for(int l = 1; l <= M; l++) {
            st = new StringTokenizer(br.readLine());
            int i = Integer.parseInt(st.nextToken());
            int j = Integer.parseInt(st.nextToken());
            
            int temp = arr[i - 1];
            arr[i - 1] = arr[j - 1];
            arr[j - 1] = temp;
        }

        for(int x = 0; x < N; x++){
            bw.write(arr[x] + " "); 
        }
        bw.flush();
        bw.close();
        br.close();
    }
}

[Javascript]

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const [N, M] = input[0].split(" ").map(Number);
let arr = new Array(N);

for(let k=0; k < N; k++){
    arr[k] = k+1;
}

for(let l=1; l <= M; l++){
    let [i, j] = input[l].split(" ").map(Number);
    let temp = arr[i-1];
    arr[i-1] = arr[j-1];
    arr[j-1] = temp;
}

console.log(arr.join(" "));

[Python]

N, M = map(int, input().split())
arr = [0] * N  # arr = [i for i in range(1, N+1)]
temp = 0

for k in range(N) :
    arr[k] = k + 1

for l in range(M) :
    i, j = map(int, input().split())
    temp = arr[i-1];
    arr[i-1] = arr[j-1];
    arr[j-1] = temp;
    
for x in range(N) :
    print(arr[x], end = " ")



💡 파이썬에서는 swap 알고리즘을 이용하지 않은 풀이도 가능

N, M = map(int, input().split())
arr = [i for i in range(1, N+1)]

for k in range(N) :
    arr[k] = k + 1

for l in range(M) :
    i, j = map(int, input().split())
    arr[i-1], arr[j-1] = arr[j-1], arr[i-1];
    
for x in range(N) :
    print(arr[x], end = " ")

0개의 댓글