Bibi's DevLog ๐ค๐
[2021 ๋ง์คํฐ์ฆ ์ฝ์ค ํ ์คํธ] 2๋จ๊ณ : ํ๋ฉด ํ๋ธ ๊ตฌํํ๊ธฐ ๋ณธ๋ฌธ
๐ฅ BE ๋ฐฑ์๋/Java ์๋ฐ
[2021 ๋ง์คํฐ์ฆ ์ฝ์ค ํ ์คํธ] 2๋จ๊ณ : ํ๋ฉด ํ๋ธ ๊ตฌํํ๊ธฐ
๋น๋น bibi 2020. 12. 14. 17:232021 ์ฝ๋์ค์ฟผ๋ ๋ง์คํฐ์ฆ ์ฝ์ค ํ ์คํธ ๋ฌธ์ ์ ์ ์ ํ์ด๋ฅผ ๊ณต์ ํ๋ ๊ธ์ ๋๋ค.
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()๋ฅผ ํธ์ถ.
- anInput๋ค์ด U U' R R' L L' B B' Q ์ค ํ๋์ธ์ง ๊ฒ์ฌ.
- 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'์ผ ๋ ์ํ๋๋ ๋ฉ์๋.