Bibi's DevLog ๐ค๐
[2021 ๋ง์คํฐ์ฆ ์ฝ์ค ํ ์คํธ] 1๋จ๊ณ : ๋จ์ด ๋ฐ์ด๋ด๊ธฐ ๋ณธ๋ฌธ
[2021 ๋ง์คํฐ์ฆ ์ฝ์ค ํ ์คํธ] 1๋จ๊ณ : ๋จ์ด ๋ฐ์ด๋ด๊ธฐ
๋น๋น bibi 2020. 12. 14. 17:162021 ์ฝ๋์ค์ฟผ๋ ๋ง์คํฐ์ฆ ์ฝ์ค ํ ์คํธ ๋ฌธ์ ์ ์ ์ ํ์ด๋ฅผ ๊ณต์ ํ๋ ๊ธ์ ๋๋ค.
1๋จ๊ณ: ๋จ์ด ๋ฐ์ด๋ด๊ธฐ ๊ตฌํํ๊ธฐ
- ์ ๋ ฅ: ์ฌ์ฉ์๋ก๋ถํฐ ๋จ์ด ํ๋, ์ ์ ์ซ์ ํ๋( -100 <= N < 100) , L ๋๋ R์ ์ ๋ ฅ๋ฐ๋๋ค. L ๋๋ R์ ๋์๋ฌธ์ ๋ชจ๋ ์ ๋ ฅ ๊ฐ๋ฅํ๋ค.
- ์ฃผ์ด์ง ๋จ์ด๋ฅผ L์ด๋ฉด ์ฃผ์ด์ง ์ซ์ ๊ฐฏ์๋งํผ ์ผ์ชฝ์ผ๋ก, R์ด๋ฉด ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ์ด๋ธ๋ค.
- ๋ฐ๋ ค๋๊ฐ ๋จ์ด๋ ๋ฐ๋์ชฝ์ผ๋ก ์ฑ์์ง๋ค.
์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ์์
ํ์ ์ค์ ์ ๋ ฅ, ์ง์ ์ค์ ์ถ๋ ฅ์ด๋ค.
> apple 3 L
leapp
> banana 6 R
banana
> carrot -1 r
arrotc
> cat -4 R
atc
1๋จ๊ณ ์ฝ๋ฉ ์๊ตฌ์ฌํญ
- ์ปดํ์ผ ๋ฐ ์คํ๋์ง ์์ ๊ฒฝ์ฐ ๋ถํฉ๊ฒฉ
- ์๊ธฐ๋ง์ ๊ธฐ์ค์ผ๋ก ์ต๋ํ ๊ฐ๊ฒฐํ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
์์ค์ฝ๋
์๋๋ ์ ๊ฐ ์ ์ถํ ํ์ด์ ๋๋ค.
package Step1;
import java.util.Scanner;
public class Step1 {
Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
Step1 step1 = new Step1();
step1.starter();
}
public void starter() {
System.out.println("< step1. ๋จ์ด ๋ฐ์ด๋ด๊ธฐ >");
String word = inputWord();
String checkedWord = wordCheck(word);
int num = inputNum();
int checkedNum = numCheck(num);
String LR = inputLR();
String checkedLR = LRCheck(LR);
trimInput(checkedWord, checkedNum, checkedLR);
}
public String inputWord() {
System.out.println("๋จ์ด ํ๋๋ฅผ ์
๋ ฅํด ์ฃผ์ธ์.");
String word = sc.nextLine();
return word;
}
public String wordCheck(String word) {
if (word.split(" ").length == 1) {
return word;
} else {
System.out.println("Error : ๋์ด์ฐ๊ธฐ ์์ด ํ ๋ฌธ์๋ก ๋ค์ ์
๋ ฅํด ์ฃผ์ธ์.");
word = inputWord();
wordCheck(word);
return word;
}
}
public int inputNum() {
System.out.println("์ซ์๋ฅผ ์
๋ ฅํด ์ฃผ์ธ์. ์
๋ ฅํ ์ซ์๋งํผ ๋ฐ์ด๋
๋๋ค.");
System.out.println("-100์ด์, 100๋ฏธ๋ง์ ์ ์๋ก ์
๋ ฅํด ์ฃผ์ธ์.");
int num = sc.nextInt();
sc.nextLine(); // ๊ฐํ๋ฌธ์ ์ ๊ฑฐ
return num;
}
public int numCheck(int num) {
if (num >= -100 && num < 100) {
return num;
} else {
System.out.println("Error : -100 ์ด์ 100 ๋ฏธ๋ง์ ์ ์๋ฅผ ์
๋ ฅํด ์ฃผ์ธ์");
num = inputNum();
numCheck(num);
return num;
}
}
public String inputLR() {
System.out.println("L(l) ๋๋ R(r)์ ์
๋ ฅํด ์ฃผ์ธ์.\nL ์
๋ ฅ์ ์ผ์ชฝ์ผ๋ก, R ์
๋ ฅ์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ์ด๋
๋๋ค.");
String LR = sc.nextLine();
return LR;
}
public String LRCheck(String LR) {
if (LR.equals("L") || LR.equals("l") || LR.equals("R") || LR.equals("r")) {
return LR;
} else {
System.out.println("Error : L, l (์ผ์ชฝ) / R, r (์ค๋ฅธ์ชฝ) ์ค ํ๋๋ง ์
๋ ฅํด ์ฃผ์ธ์.");
LR = inputLR();
LRCheck(LR);
return LR;
}
}
public void trimInput(String word, int num, String LR) {
// LR) ์๋ฌธ์ ์
๋ ฅ์ ๋๋ฌธ์๋ก ๋ณํ
if (LR.equals("l")) LR = "L";
if (LR.equals("r")) LR = "R";
// num) ์์๋ ์์๋ก & LR๋ฐ๋๋ก ๋ง๋ค๊ณ , ๋ง๋ค์ด์ง ์์๋ word.length๋ก ๋๋ ๋๋จธ์ง๋ก ์นํ
if (num < 0) {
if (LR.equals("L")) LR = "R"; // ์ผ->์ค, ์ค->์ผ
else if (LR.equals("R")) LR = "L";
num *= -1; // ์์๋ก ๋ง๋ค๊ธฐ
}
int pushNum = num % word.length(); // pushNum = ์ค์ ๋ฐ์ด๋ด๋ ์ซ์
// word) ๊ทธ๋๋ก ๋ฐํ
pushWord(word, pushNum, LR);
}
public void pushWord(String word, int num, String LR) {
String result = null;
String wordLeft = null;
String wordRight = null;
int wordLength = word.length();
if (LR.equals("L")) { // ์ผ์ชฝ์ผ๋ก ๋ฐ์ด๋ผ ๋
// : ์์์๋ถํฐ num๋ฒ์งธ๊น์ง ์๋ผ๋ด์ด(wordRight) ๋๋จธ์ง ๊ธ์(wordLeft)์ ๋ค์ ๋ถ์.
wordLeft = word.substring(num, wordLength);
wordRight = word.substring(0, num);
}
if (LR.equals("R")) {// ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ์ด๋ผ ๋
// : ๋ค์์๋ถํฐ num๋ฒ์งธ๊น์ง ์๋ผ๋ด์ด(wordLeft) ๋๋จธ์ง ๊ธ์(wordRight)์ ์์ ๋ถ์.
wordLeft = word.substring(wordLength - num, wordLength);
wordRight = word.substring(0, wordLength - num);
}
result = wordLeft + wordRight;
System.out.println("๊ฒฐ๊ณผ : " + result);
sc.close();
}
}
์ถ๋ ฅํํ
์ค๋ช
step-1 branch : Step1.java
1๋จ๊ณ : ๋จ์ด ๋ฐ์ด๋ด๊ธฐ ๊ตฌํํ๊ธฐ
Step1.java ์ฝ๋ ์ค๋ช
-
inputWord() : ๋์ด์ฐ๊ธฐ ์๋ ํ ๋จ์ด ์ ๋ ฅ๋ฐ๊ธฐ
- wordCheck() : ๋์ด์ฐ๊ธฐ ์๋์ง ํ์ธ
-
inputNum() : -100์ด์ 100๋ฏธ๋ง์ ์ ์.
- numCheck() : -100์ด์ 100๋ฏธ๋ง์ธ์ง ํ์ธ
-
inputLR() : L,l,R,r ์ค ํ๋์ ๋ฌธ์.
- LRCheck() : L, l, R, r ์ด ์๋ ๋ค๋ฅธ ๋ฌธ์์ธ์ง ํ์ธ
-
trimInput(word, num, LR) : ๊ฐ ์ ๋ ฅ๊ฐ์ ์ ๋ํ๊ธฐ
- 'word' : ๊ฐ ๊ธ์๋ฅผ ์์๋ก ํ๋ ๋ฐฐ์ด๋ก ๋ณํ
- 'LR' : l์ L๋ก, r์ R๋ก ๋ณํ
- 'num'
- ๋ง์ฝ num์ด ์์๋ผ๋ฉด ์์๋ก ๋ณํํ ๋ค, L์ R๋ก R์ L๋ก ๋ฐ๊พผ๋ค.
์ซ์๊ฐ ์์๋ผ๋ฉด, ๊ทธ ์ ๋๊ฐ์ธ ์์์ ์ซ์์ L/R์ ๋ฐ๋๋ก ํ ๊ฒ๊ณผ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋ค.
์๋ฅผ ๋ค์ด -1, L (์ผ์ชฝ์ผ๋ก -1๊ธ์ ๋ฐ์ด๋ด๊ธฐ)์ ๊ฒฐ๊ณผ๋ 1,R(์ค๋ฅธ์ชฝ์ผ๋ก 1๊ธ์ ๋ฐ์ด๋ด๊ธฐ)์ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋ค.- num์ word์ ๊ธ์์๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๊ตฌํ๋ค.
์ซ์๊ฐ ์๋ฌด๋ฆฌ ์ปค๋, ๊ธ์์๋ก ๋๋ ๋๋จธ์ง๋งํผ๋ง ๋ฐ์ด๋ด๋ฉด ๋๋ค.
why? ๋ฐ๋ ค๋๊ฐ ๋จ์ด๋ ๋ฐ๋์ชฝ์ผ๋ก ์ฑ์์ง๊ธฐ ๋๋ฌธ.
-
pushWord() : word๋ฅผ num๋งํผ L/R๋ฐฉํฅ์ผ๋ก ๋ฐ์ด๋ด๊ธฐ
- (์ด ํ์ด๋ '์ผ์ชฝ/์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ์ด๋ด๊ธฐ'๋ณด๋ค๋ '์๋ผ์ ์ผ์ชฝ/์ค๋ฅธ์ชฝ์ ๋ถ์ด๊ธฐ'์ ๋ ๊ฐ๊น์ต๋๋ค..)
- ๊ธ์ ์ฌ๋ฐฐ์น๋ฅผ ์ํด substring(int beginindex, int endindex)์ฌ์ฉ.
- ์๋ฐ substring1, ์๋ฐ substring2 ๋ฅผ ์ฐธ๊ณ ํ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
- ์ผ์ชฝ์ผ๋ก ๋ฐ์ด๋ผ ๋๋ ์์์๋ถํฐ num๋ฒ์งธ๊น์ง ์๋ผ๋ด์ด(wordRight) ๋๋จธ์ง ๊ธ์(wordLeft)์ ๋ค์ ๋ถ์.
- wordLeft = word.substring(num, wordLength);
- wordRight = word.substring(0, num);
- ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ์ด๋ผ ๋๋ ๋ค์์๋ถํฐ num๋ฒ์งธ๊น์ง ์๋ผ๋ด์ด(wordLeft) ๋๋จธ์ง ๊ธ์(wordRight)์ ์์ ๋ถ์.
- wordLeft = word.substring(wordLength - num, wordLength);
- wordRight = word.substring(0, wordLength - num);
- ๊ฒฐ๊ณผ๋ ๋ ๋ค wordLeft์ wordRight๋ฅผ ์ด์ด๋ถ์ธ ๊ฒ์ด๋ค.