Bibi's DevLog ๐Ÿค“๐ŸŽ

[2021 ๋งˆ์Šคํ„ฐ์ฆˆ ์ฝ”์Šค ํ…Œ์ŠคํŠธ] 2๋‹จ๊ณ„ : ํ‰๋ฉด ํ๋ธŒ ๊ตฌํ˜„ํ•˜๊ธฐ ๋ณธ๋ฌธ

๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ/Java ์ž๋ฐ”

[2021 ๋งˆ์Šคํ„ฐ์ฆˆ ์ฝ”์Šค ํ…Œ์ŠคํŠธ] 2๋‹จ๊ณ„ : ํ‰๋ฉด ํ๋ธŒ ๊ตฌํ˜„ํ•˜๊ธฐ

๋น„๋น„ bibi 2020. 12. 14. 17:23
2021 ์ฝ”๋“œ์Šค์ฟผ๋“œ ๋งˆ์Šคํ„ฐ์ฆˆ ์ฝ”์Šค ํ…Œ์ŠคํŠธ ๋ฌธ์ œ์™€ ์ €์˜ ํ’€์ด๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค.

 

2๋‹จ๊ณ„: ํ‰๋ฉด ํ๋ธŒ ๊ตฌํ˜„ํ•˜๊ธฐ

3 X 3์˜ 2์ฐจ์› ๋ฐฐ์—ด์ด ์•„๋ž˜์ฒ˜๋Ÿผ ์žˆ๋‹ค.

R R W 
G C W
G B B

์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›์•„์„œ ์•„๋ž˜์˜ ๋™์ž‘์„ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ•˜์‹œ์˜ค

> U ๊ฐ€์žฅ ์œ—์ค„์„ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ RRW -> RWR 
> U' ๊ฐ€์žฅ ์œ—์ค„์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ RRW -> WRR 
> R ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์ค„์„ ์œ„๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ WWB -> WBW 
> R' ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์ค„์„ ์•„๋ž˜๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ WWB -> BWW
> L ๊ฐ€์žฅ ์™ผ์ชฝ ์ค„์„ ์•„๋ž˜๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ RGG -> GRG (L์˜ ๊ฒฝ์šฐ R๊ณผ ๋ฐฉํ–ฅ์ด ๋ฐ˜๋Œ€์ž„์„ ์ฃผ์˜ํ•œ๋‹ค.) 
> L' ๊ฐ€์žฅ ์™ผ์ชฝ ์ค„์„ ์œ„๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ RGG -> GGR 
> B ๊ฐ€์žฅ ์•„๋žซ์ค„์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ GBB -> BGB (B์˜ ๊ฒฝ์šฐ๋„ U์™€ ๋ฐฉํ–ฅ์ด ๋ฐ˜๋Œ€์ž„์„ ์ฃผ์˜ํ•œ๋‹ค.) 
> B' ๊ฐ€์žฅ ์•„๋žซ์ค„์„ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ GBB -> BBG
> Q Bye~๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•œ๋‹ค. 

์š”๊ตฌ์‚ฌํ•ญ

  • ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋ฉด ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • ๊ฐ„๋‹จํ•œ ํ”„๋กฌํ”„ํŠธ (CLI์—์„œ ํ‚ค๋ณด๋“œ ์ž…๋ ฅ๋ฐ›๊ธฐ ์ „์— ํ‘œ์‹œํ•ด์ฃผ๋Š” ๊ฐ„๋‹จํ•œ ๊ธ€์ž๋“ค - ์˜ˆ: CUBE> )๋ฅผ ํ‘œ์‹œํ•ด ์ค€๋‹ค.
  • ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›์€ ๊ฒฝ์šฐ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•ด์„œ ๋งค ๊ณผ์ •์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค.

๋™์ž‘ ์˜ˆ์‹œ

R R W
G C W
G B B 

CUBE> UUR

U 
R W R
G C W
G B B

U
W R R
G C W 
G B B 

R 
W R W 
G C B
G B R

CUBE> Q
Bye~ 

2๋‹จ๊ณ„ ์ฝ”๋”ฉ ์š”๊ตฌ์‚ฌํ•ญ

  • ๋„ˆ๋ฌด ํฌ์ง€ ์•Š์€ ํ•จ์ˆ˜ ๋‹จ์œ„๋กœ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ
  • ์ „์—ญ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ์„ ์ž์ œํ•  ๊ฒƒ
  • ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์„ ์ ์ ˆํžˆ ํ™œ์šฉํ•  ๊ฒƒ

 


์†Œ์Šค์ฝ”๋“œ

์•„๋ž˜๋Š” ์ œ๊ฐ€ ์ œ์ถœํ•œ ํ’€์ด์ž…๋‹ˆ๋‹ค.

package Step2;

import java.util.ArrayList;
import java.util.Scanner;

public class Step2 { // ํ‰๋ฉด ํ๋ธŒ ๊ตฌํ˜„ํ•˜๊ธฐ
    Scanner sc = new Scanner(System.in);

    char[][] cubeBoard = new char[3][3];

    public static void main(String[] args) {
        Step2 step2 = new Step2();
        System.out.println("๐Ÿ’ฌ ํ‰๋ฉด ํ๋ธŒ ํผ์ฆ์„ ์›€์ง์—ฌ ๋ณด์„ธ์š”!");
        step2.initCube();
        step2.printCube();
        step2.ready();
    }

    public void initCube() {
        char[][] initCube = new char[3][3];
        initCube[0] = new char[]{'R', 'R', 'W'};
        initCube[1] = new char[]{'G', 'C', 'W'};
        initCube[2] = new char[]{'G', 'B', 'B'};
        cubeBoard = initCube;
    }

    public void ready(){
        String input = start();
        ArrayList<String> inputList = trimInput(input);
        checkInput(inputList);
    }

    public void printCube() {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                System.out.print(cubeBoard[i][j] + " ");
            }
            System.out.println();
        }
    }

    public String start() {
        System.out.println("↑ ํ˜„์žฌ ํ๋ธŒ-------------------------------------------------------");
        System.out.println("โœ” ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํผ์ฆ์„ ํ•œ ์นธ์”ฉ ์›€์ง์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.");
        System.out.println(" U : ๊ฐ€์žฅ ์œ—์ค„์„ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ, U' : ๊ฐ€์žฅ ์œ—์ค„์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ");
        System.out.println(" R : ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์ค„์„ ์œ„๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ, R' : ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์ค„์„ ์•„๋ž˜๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ");
        System.out.println(" L : ๊ฐ€์žฅ ์™ผ์ชฝ ์ค„์„ ์•„๋ž˜๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ, L' : ๊ฐ€์žฅ ์™ผ์ชฝ ์ค„์„ ์œ„๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ");
        System.out.println(" B : ๊ฐ€์žฅ ์•„๋žซ์ค„์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ, B' : ๊ฐ€์žฅ ์•„๋žซ์ค„์„ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ");
        System.out.println("โ›” Q ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.");
        System.out.print("CUBE > ");
        String input = sc.nextLine();
        return input;
    }

    public ArrayList<String> trimInput(String input){  // ์ž…๋ ฅ๊ฐ’ ๋‹ค๋“ฌ๊ธฐ
        String[] inputArr = input.split("");
        ArrayList<String> inputList = new ArrayList<>(); // ๋ฆฌํ„ด๊ฐ’ ArrayList
        for (int i = 0; i < inputArr.length; i++) {
            String inputElement = inputArr[i];
            if (inputElement.equals("'")) {
                inputArr[i - 1] = inputArr[i - 1] + "'"; // ' ์š”์†Œ๋Š” ์ง์ „ ์š”์†Œ์— ๋ถ™์—ฌ์ฃผ๊ธฐ
            }
        }
        for (int i = 0; i < inputArr.length; i++) {
            String inputArrElement = inputArr[i];
            if (!inputArrElement.equals("'")) { // ์š”์†Œ๊ฐ€ '์ด ์•„๋‹ ๋•Œ๋งŒ inputList์— ๋„ฃ๊ธฐ
                inputList.add(inputArrElement);
            }
        }
        return inputList;
    }

    public void checkInput(ArrayList<String> inputList){
        int inputListSize = inputList.size();
        for (int i = 0; i < inputListSize; i++) {
            String anInput = inputList.get(i);
            if (anInput.equals("U'") || anInput.equals("U") || anInput.equals("R'") || anInput.equals("R")
                || anInput.equals("L'") || anInput.equals("L") || anInput.equals("B'") || anInput.equals("B")
                || anInput.equals("Q")) {
                guideInput(anInput);
            } else {
                System.out.println("โ— ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ ์–ด๋ฅผ ๋‹ค์‹œ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.\n");
                String reInput = start();
                ArrayList<String> reInputList = trimInput(reInput);
                checkInput(reInputList);
            }
        }
        ready();
    }

    public void guideInput(String anInput){
        char[][] tempCube = new char[3][3]; // ์ž„์‹œ๋ณ€์ˆ˜ tempCube ์ดˆ๊ธฐํ™”
        switch(anInput) {
            case "U" :
                whenU(tempCube);
                break;
            case "U'" :
                whenUDot(tempCube);
                break;
            case "R" :
                whenR(tempCube);
                break;
            case "R'" :
                whenRDot(tempCube);
                break;
            case "L" :
                whenL(tempCube);
                break;
            case "L'" :
                whenLDot(tempCube);
                break;
            case "B" :
                whenB(tempCube);
                break;
            case "B'" :
                whenBDot(tempCube);
                break;
            case "Q" :
                exit();
                break;
        }
        printCube();
        System.out.println(); // ์ค„๋ฐ”๊ฟˆ
    }

    public void exit() {
        sc.close();
        System.out.println("Bye~");
        System.exit(0);
    }

    public char[][] copyCube(char[][] tempCube){ // cubeBoard์—์„œ tempCube๋กœ ๋ณต์‚ฌ
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j ++){
                tempCube[i][j] = cubeBoard[i][j];
            }
        }
        return tempCube;
    }

    public void pasteCube(char[][] tempCube){ // tempCube ๋‚ด์šฉ์„ cubeBoard๋กœ ๋ถ™์—ฌ๋„ฃ๊ธฐ
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j ++){
                cubeBoard[i][j] = tempCube[i][j];
            }
        }
    }

    public void whenU(char[][] tempCube){ // U : ๊ฐ€์žฅ ์œ—์ค„์„ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ
        System.out.println("\nU");
        copyCube(tempCube); // tempCube์— cubeBoard ๋‚ด์šฉ ๋ณต์‚ฌ
        tempCube[0][0] = cubeBoard[0][1]; // ๋ณ€๊ฒฝ์‚ฌํ•ญ
        tempCube[0][1] = cubeBoard[0][2];
        tempCube[0][2] = cubeBoard[0][0];
        pasteCube(tempCube); // tempCube๊ฐ€ ์ƒˆ๋กœ์šด cubeBoard๊ฐ€ ๋จ.
    }

    public void whenUDot(char[][] tempCube){ // U' : ๊ฐ€์žฅ ์œ—์ค„์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ
        System.out.println("\nU'");
        copyCube(tempCube);
        tempCube[0][0] = cubeBoard[0][2];
        tempCube[0][1] = cubeBoard[0][0];
        tempCube[0][2] = cubeBoard[0][1];
        pasteCube(tempCube);
    }

    public void whenR(char[][] tempCube){ // R : ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์ค„์„ ์œ„๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ
        System.out.println("\nR");
        copyCube(tempCube);
        tempCube[0][2] = cubeBoard[1][2];
        tempCube[1][2] = cubeBoard[2][2];
        tempCube[2][2] = cubeBoard[0][2];
        pasteCube(tempCube);
    }

    public void whenRDot(char[][] tempCube){ // R' : ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์ค„์„ ์•„๋ž˜๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ
        System.out.println("\nR'");
        copyCube(tempCube);
        tempCube[0][2] = cubeBoard[2][2];
        tempCube[1][2] = cubeBoard[0][2];
        tempCube[2][2] = cubeBoard[1][2];
        pasteCube(tempCube);
    }

    public void whenL(char[][] tempCube){ // L : ๊ฐ€์žฅ ์™ผ์ชฝ ์ค„์„ ์•„๋ž˜๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ
        System.out.println("\nL");
        copyCube(tempCube);
        tempCube[0][0] = cubeBoard[2][0];
        tempCube[1][0] = cubeBoard[0][0];
        tempCube[2][0] = cubeBoard[1][0];
        pasteCube(tempCube);
    }

    public void whenLDot(char[][] tempCube){ // L' : ๊ฐ€์žฅ ์™ผ์ชฝ ์ค„์„ ์œ„๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ
        System.out.println("\nL'");
        copyCube(tempCube);
        tempCube[0][0] = cubeBoard[1][0];
        tempCube[1][0] = cubeBoard[2][0];
        tempCube[2][0] = cubeBoard[0][0];
        pasteCube(tempCube);
    }

    public void whenB(char[][] tempCube){ // B : ๊ฐ€์žฅ ์•„๋žซ์ค„์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ
        System.out.println("\nB");
        copyCube(tempCube);
        tempCube[2][0] = cubeBoard[2][2];
        tempCube[2][1] = cubeBoard[2][0];
        tempCube[2][2] = cubeBoard[2][1];
        pasteCube(tempCube);
    }

    public void whenBDot(char[][] tempCube){ // B' : ๊ฐ€์žฅ ์•„๋žซ์ค„์„ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ
        System.out.println("\nB'");
        copyCube(tempCube);
        tempCube[2][0] = cubeBoard[2][1];
        tempCube[2][1] = cubeBoard[2][2];
        tempCube[2][2] = cubeBoard[2][0];
        pasteCube(tempCube);
    }
} // class

 

์ถœ๋ ฅํ˜•ํƒœ

 

 


์„ค๋ช…

Step2.java ์ฝ”๋“œ ์„ค๋ช…

  • ์ „์—ญ๋ณ€์ˆ˜
    • sc : Scanner๊ฐ์ฒด
    • cubeBord : ๋นˆ 3*3 2์ฐจ์›๋ฐฐ์—ด
  • initCube() : ์ œ์‹œ๋œ 2์ฐจ์›๋ฐฐ์—ด์„ cubeBoard์— ์ž…๋ ฅํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  • ready() : start(), trimInput(), checkInput()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  • start() : ์ž…๋ ฅ ํ‚ค ์„ค๋ช… ๋ฐ ๋ช…๋ น์–ด(input)๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š” ๋ฉ”์†Œ๋“œ
    • return : input
  • trimInput(input) : ์ž…๋ ฅ๊ฐ’์„ ๋‹ค๋“ฌ๋Š” ๋ฉ”์†Œ๋“œ
    • ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅ๋ฐ›์•˜์„ ๋•Œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€๋œ ๋ฉ”์†Œ๋“œ.
    • split("") ํ•œ ๋’ค, ์š”์†Œ๊ฐ€ '์ด๋ฉด ๋ฐ”๋กœ ์•ž ์š”์†Œ์— '๋ฅผ ๋ถ™์ธ๋‹ค.
    • inputList : ์ •๋ฆฌ๋œ ์ž…๋ ฅ๊ฐ’(๋ช…๋ น์–ด๋“ค)์„ ๋‹ด๋Š” ArrayList
      • '๊ฐ€ ์•„๋‹Œ ์š”์†Œ๋“ค๋งŒ inputList์— ๋‹ด๋Š”๋‹ค.
    • return : inputList
  • checkInput(inputList) : ์ •๋ฆฌ๋œ ์ž…๋ ฅ๊ฐ’ ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ(anInput)๋“ค์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฉ”์†Œ๋“œ.
    • anInput๋“ค์ด U U' R R' L L' B B' Q ์ค‘ ํ•˜๋‚˜์ธ์ง€ ๊ฒ€์‚ฌ.
      • ์ผ์น˜ํ•˜๋ฉด guideInput(anInput) ํ˜ธ์ถœ.
      • ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ๋‹ค์‹œ start()-trimInput()-checkInput() ์ง„ํ–‰.
    • ์ž…๋ ฅ๊ฐ’ ๋ฐฐ์—ด์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉด ready()๋ฅผ ํ˜ธ์ถœ.
  • guideInput(anInput) : switch-case๋ฌธ์„ ํ†ตํ•ด ์ž…๋ ฅ๊ฐ’์— ๋งž๋Š” ๋ฉ”์†Œ๋“œ๋กœ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ.
    • tempCube : ๋ฐ”๋€ ํ๋ธŒ ์ž…๋ ฅ๊ฐ’์„ ๋‹ด์„ ์ž„์‹œ๋ณ€์ˆ˜.
    • guideInput()์˜ ๋งค ์‹คํ–‰ ํ›„ printCube()๋กœ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • copyCube(tempCube) : cubeBoard์„ tempCube๋กœ ๋ณต์‚ฌํ•˜๋Š” 2์ฐจ์›๋ฐฐ์—ด ๋ณต์‚ฌ ๋ฉ”์†Œ๋“œ.
    • return : tempCube (cubeBoard๊ฐ€ ๋ณต์‚ฌ๋œ).
  • pasteCube(tempCube) : tempCube๋ฅผ cubeBoard๋กœ ๋ถ™์—ฌ๋„ฃ๊ธฐํ•˜๋Š” 2์ฐจ์›๋ฐฐ์—ด ๋ณต์‚ฌ ๋ฉ”์†Œ๋“œ.
  • whenU() whenUDot() whenR() whenRDot() whenL() whenLDot() whenB() whenBDot()
    • ๊ฐ๊ฐ ์ž…๋ ฅ๊ฐ’์ด U, U', R, R', L, L', B, B'์ผ ๋–„ ์ˆ˜ํ–‰๋˜๋Š” ๋ฉ”์†Œ๋“œ.