자바 2차원 String배열 swap

Updated:

Java

String 배열 Swap

서론

사탕게임을 풀다보니 2차원 String 배열을 입력 받아, 각 배열의 값 char들을 swap하여야 하는 경우가 있었다.
이를 코드로 정리하여 추후에 사용, 복습하기 위해 스스로 구현하여 정리하였다.

코드

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

public class Main {

	static int n;
	static String[] candy;

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

		// 2차원 String 배열 입력
    	BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언
    	n = Integer.parseInt(bf.readLine());
    	candy = new String[n];
    	for(int i = 0; i < n; i++) {
    		candy[i] = bf.readLine();
    	}

    	//가로를 기준으로 인접한 2개의 사탕을 교환한다.
    	for(int i = 0; i < n; i++) {
    		for(int j = 0; j < n - 1; j++) {
    			candy = swap(candy, i, j , i , j + 1);
    			
    			candy = swap(candy, i, j , i , j + 1);
    		}
    	}
    	//세로를 기준으로 인접한 2개의 사탕을 교환한다.
    	for(int i = 0; i < n - 1; i++) {
    		for(int j = 0; j < n; j++) {
    			candy = swap(candy, i, j , i + 1, j);
    			
    			candy = swap(candy, i, j , i + 1, j);
    		}
    	}
    	
	}
	// swap을 진행하는 함수. c1과 c2는 각각 해당 char가 있는 좌표
	public static String[] swap(String[] temp, int c1_y, int c1_x , int c2_y, int c2_x) {	
		// 변경하려는 문자의 좌표의 y값이 같을시 == 가로로 교환
		if(c1_y == c2_y) {
			StringBuilder chStr = new StringBuilder(temp[c1_y]);
	        char tmp = temp[c1_y].charAt(c1_x);
	        chStr.setCharAt(c1_x, temp[c2_y].charAt(c2_x));
	        chStr.setCharAt(c2_x, tmp);
	        temp[c1_y] = chStr.toString();
		}
		// 변경하려는 문자의 좌표의 y값이 다를시 == 세로로 교환
		else {
			StringBuilder chStr1 = new StringBuilder(temp[c1_y]);
			StringBuilder chStr2 = new StringBuilder(temp[c2_y]);
			char tmp = temp[c1_y].charAt(c1_x);
			chStr1.setCharAt(c1_x, temp[c2_y].charAt(c2_x));
			chStr2.setCharAt(c2_x, tmp);
			temp[c1_y] = chStr1.toString();
			temp[c2_y] = chStr2.toString();
		}
        return temp;
    }