본문 바로가기
Baekjoon 자바 코드/1차원 배열

[백준] 10813번 공 바꾸기 풀이 코드 (Java 자바)

by 망댕이 2024. 7. 30.
반응형

접근 방법)

 

첫 번째 줄에 배열의 크기와 배열의 값을 서로 바꾸는 반복작업을 진행할 횟수를 알려주기 때문에 정말 쉽게 풀 수 있는 문제이다.

N의 크기의 배열을 생성하고 for 문안에서 배열의 값을 서로 바꾸는 반복 작업을 M회 반복하면 된다.

 

그럼 for문 안에서 배열 값을 서로 바꾸는 코드를 작성하기 위해 잠시 배열 값을 담아둘 수 있는 int형 변수가 필요하다.

 

 

▷ 배열 값 서로 바꾸기

 

int k 를 이용하여 쉽게 해결할 수 있다.

for(int a = 0; a < n; a++){
    int i = s.nextInt();
    int j = s.nextInt();
    // Scanner s = new Scanner(System.in)
    int k = g[i-1];
    g[i-1] = g[j-1];
    g[j-1] = k;
}

 

 

g [i-1]의 배열 값을 k에 담아두고 g [i-1]에는 g [j-1]의 값을 할당한다.

그리고 g [j-1]에는 g [i-1] 값이었던 k를 할당함으로써 두 배열의 값을 서로 바꿀 수 있다.


 

Scanner와 BufferedReader&BufferedWriter를 이용하여 2가지 방법으로 코드를 작성해 보자.

정답 코드 1)

import java.util.Scanner;

class Main{
    public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        int m = s.nextInt();
        int n = s.nextInt();
        int[] g = new int[m];
        
        for(int x = 0; x < m; x++){
            g[x] = x+1;
        }
        
        for(int a = 0; a < n; a++){
            int i = s.nextInt();
            int j = s.nextInt();
            
            int k = g[i-1];
            g[i-1] = g[j-1];
            g[j-1] = k;
        }
        for(int b = 0; b < m; b++){
            System.out.print(g[b]+" ");
        }
    }
}

 

정답 코드 2)

import java.io.*;
import java.util.StringTokenizer;

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 g[] = new int[n];
        int m = Integer.parseInt(st.nextToken());
        int z;
        for(int c = 0; c < n; c++){
            g[c] = c+1;
        }
        for(int a = 0; a < m; a++){
            st = new StringTokenizer(br.readLine());
            
            int i = Integer.parseInt(st.nextToken());
            int j = Integer.parseInt(st.nextToken());
            
            z = g[i-1];
            g[i-1] = g[j-1];
            g[j-1] = z;
        }
        for(int b = 0; b < n; b++){
            bw.write(g[b]+" ");
        }
        br.close();
        bw.flush();
        bw.close();
    }
}
반응형