Progamming/BAEK JOON > 백준의 알고리즘

[백준] 10813번 : 공 바꾸기 - JAVA 문제

코딩밤 2023. 3. 9. 11:20
300x250

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

 

10813번: 공 바꾸기

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

www.acmicpc.net

 

 

문제

백준 알고리즘 10813번 문제 이미지

 

분석

첫째 줄에 N과 M 이 주어진다. 

둘째 줄부터 M개의 줄에 걸쳐서 공을 교환할 방법을 주어짐, i, j 로 입력받음

i 번 바구니와 j 번 바구니에 들어있는 공을 서로 교환한다.

두개의 값이 들어올 때마다 배열에 들고 있는 값들을 교환시킨다.

 

 

풀이
import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws IOException{

        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        int arr[] = new int[N];
        int M = sc.nextInt();
        int temp;

        for(int i = 0; i < arr.length; i++) {
            arr[i] = i + 1;                     // 배열의 index 는 0 부터 시작 [0,1,2,3,4,5]
        }                                       // 첫번째는 0 이지만 첫번째 바구니 이기때문에 1부터 시작이니 +1 해줌
        for(int j = 0; j < M; j++) {
            int I = sc.nextInt();
            int J = sc.nextInt();

            temp = arr[I-1];
            arr[I-1] = arr[J-1];
            arr[J-1] = temp;
        }
        for(int k = 0; k <arr.length; k++) {
            System.out.print(arr[k] + " ");
        }
    }
}

Scanner 를 이용한 문제 풀이입니다.

 

자바에서  temp라고 하는 건, 임시 저장 공간 변수 칭합니다.

 

temp 이미지

 

temp라는 빈 공간의 변수에 arr[I - 1] 값을 넣어주고

arr[I - 1] 이 빈 공간이 됐을 때 그자리에 arr[J - 1] 값을 넣어 주고

arr[J - 1] 이 빈공간이 됬을때 temp 값을 넣어줍니다.

순서를 바꾼다고 생각하시면 됩니다.

정보처리기사에 알고리즘 문제에도 나왔던 것으로 기억나네요~

 

 

풀이 2
import java.io.*;
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 arr[] = new int[N];
        int M = Integer.parseInt(st.nextToken());
        int temp;

        for(int i = 0; i < arr.length; i++) {
            arr[i] = i + 1;                     // 배열의 index 는 0 부터 시작 [0,1,2,3,4,5]
        }                                       // 첫번째는 0 이지만 첫번째 바구니 이기때문에 1부터 시작이니 +1 해줌
        for(int j = 0; j < M; j++) {
            st = new StringTokenizer(br.readLine());

            int I = Integer.parseInt(st.nextToken());
            int J = Integer.parseInt(st.nextToken());

            temp = arr[I-1];
            arr[I-1] = arr[J-1];
            arr[J-1] = temp;
        }
        for(int k = 0; k <arr.length; k++) {
            bw.write(arr[k] + " ");
        }
        br.close();
        bw.flush();
        bw.close();
    }
}

 

BufferedReader를 이용한 문제 풀이입니다.

Scanner 보다 시간적 면이나 메모리 면에서 성능이 더 좋은 것 같습니다.

 

BufferedReader, BufferedWrite에 대해 궁금하시면
참고하시면 됩니다.

2023.02.16 - [knowledge base/BAEK JOON > 백준의 알고리즘] - [백준] 15552번 : 빠른 A+B - JAVA, BufferedReader, BufferedWriter

 

[백준] 15552번 : 빠른 A+B - JAVA, BufferedReader, BufferedWriter

https://www.acmicpc.net/problem/15552 15552번: 빠른 A+B 첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다. www.acmic

codingnight.tistory.com

 

 

300x250