2023๋ 3์ ์๊ฐํ๊ณ
์ ์๋ ์ฒ์ ๋ต์์ ๋๋ ์ฐ์์ธ ๋ณด๋ ๊ธฐ๋ถ์ด์๋ค.
ํ๋ฉด์์๋ง ๋ต๋ ๋ถ์ด ์ค์ ๋ก ๋ ์์์ ์์ง์ด๋๊น ์ ๊ธฐํ๊ณ ๋ง ๊ทธ๋ฌ๋ค
์ป์ ๊ฒ
์ค๊ณ์ ์ค์์ฑ
์ฝ๋ ์งค ๋ ๋ฌดํฑ๋๊ณ for๋ฌธ, if๋ฌธ ์ฐ๋ ์ต๊ด์ด ๋์์ก๋ค. ์ ์๋๊ป ๋ฐฐ์ฐ๊ธฐ ์ ๊น์ง๋ ์ด๊ฒ ์ ์ข์ ์ต๊ด์ด๊ณ ์๋ชป๋ ๊ฑด์ง ์ธ์ง์กฐ์ฐจ ๋ชป ํ๊ณ ์์๋๋ฐ ์ ์๋ ๋ง์ ๋ค์ด๋ณด๋ ๋ด๊ฐ ์ ๊ทธ๋ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ ์๊ฐ์ด ์ค๋๊ฑธ๋ ธ๊ณ ์ค๋ ฅ์ด ๋์ง ์์๋์ง ์๊ฒ๋์๋ค. ์ค๊ณ์ ์ค์์ฑ์ ๋ํด์ ์์ง ๋ชปํ๊ณ ํญ์ ์ฝ๋ฉ์๋ง ์ง์ฐฉํ๊ณ ๊ทธ๊ฒ ์ ๋ถ์ธ ์ค ์๋ ์ค๋ ฅ์ด ์ ๋์ง..!
ํ๋ก๊ทธ๋๋ฐ = ์ค๊ณ(90%) + ์ฝ๋ฉ(10%)
์ฝ๋ฉ์ ์ง์ฐฉํ๋ ๊ฒฝํฅ์ด ์๋๋ฐ ์ฝ๋ฉ์ ๊ทธ์ ์ค๊ณํ ๋๋ก ๊ตฌํํ๋ ๊ฒ์ด๋ค. ์ผ๋จ ์ค๊ณ๊ฐ ์ ๋์ด์ผ ํ๊ณ ์ฌ๊ธฐ์ ๋ง์ ์๊ฐ์ ๋ค์ฌ์ผ ํ๋ค. ์ฒ์๋ถํฐ ์๋ฌด ์๊ฐ๋ ํ์ง ์๊ณ for๋ฌธ if๋ฌธ ์น๋ ๊ฑฐ ์ข์ง ์๋ค. ๋ด๊ฐ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์ง๊ฒ ๋ค ์๊ฐ ์ ๋ฆฌ(์ค๊ณ๋ฅผ ๋จผ์ ํ๊ณ ) ์ฝ๋๋ฅผ ์ง์ผ ํ๋ค. ์ด ๋ถ๋ถ์ ๋ ๋ฆฌ๋ฉด ๋๋ ๊ฑฐ ์๋๊ฐ? ์ด๋ฐ ์์์ ์ธ ๋ถ๋ถ์ผ๋ก ์ ๊ทผ. ๋ญ ํ ์ง ํ๊ธ๋ก ๋จผ์ ์ ๊ณ ํ๋์ฉ ๊ตฌํํ์. ํ๋ฆ์ด ํ๋ฆฐ ๊ฒ ์๋์ง ํ๊ธ๋ก ๋จผ์ ์ฒดํฌ๋ฅผ ํด๋ณด๊ณ ๊ตฌํ(์ฝ๋ฉ)์ ํด์ผ ํ๋ค.
์ค๊ณ = ๊ทธ๋ฆฌ๊ธฐ = ๊ตฌ์กฐ & ๋ฐฐ์น ๋ง์ด ๊ทธ๋ ค๋ณด์!
1, 2์ผ์ฐจ ๋ณ์ฐ๊ธฐ
์ฒซ๋ ์์ ํ์ด๋ณธ ๊ฒ ๋ณ์ฐ๊ธฐ์๋๋ฐ ๊ฒฝ๋ ฅ๋ ์์ผ๋ฉด์ ์ด๊ฒ๋ ์ ๋๋ก ๋ชปํ๋ค๋ ๋ด ์ค๋ ฅ์ ํํ์์๋ค ์ฝ๋๋ ์ง์ง ๊ฐํ์ด๊ณ โฆ. ์์ ์ด๊ฑฐ์ง๋ก ์ง๊ณ โฆ.
int row = 5;
int col = 9;
int test = 1;
for (int i = row; i > 0; i--) {
for (int j = 0; j < col-5; j++) {
System.out.print(" ");
}
for (int x = 0; x < test; x++) {
System.out.print("*");
}
// for (int z = 0; z < col-5; z++) {
// System.out.print(" ");
// }
System.out.println();
col--;
test += 2;
}
2์ผ์ฐจ์ ์ค๊ณ, ๊ทธ๋ฆฌ๋ ์ฐ์ต์ ํตํด ๊ท์น์ ์ฐพ์์ ์ค๊ณ ํ ๊ตฌํํด๋ณด๋ ์ผ์ชฝ ์ฝ๋๊ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ๋..!!!
int start = 5, end = 5;
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 9; j++) {
if ( start <= j && j <= end ) {
System.out.printf("*");
} else {
System.out.print(" ");
}
}
start--; end++;
System.out.println();
}

1์ฃผ์ฐจ : mid๊ฐ ๊ตฌํ๊ธฐ
// 3๊ฐ์ ์๋ฅผ ์
๋ ฅ๋ฐ์์ ๊ทธ ์ค์ ๋ ๋ฒ์งธ๋ก ํฐ ์๋ฅผ ๋ฐํํ๋ ๋ฉ์๋
// mid(int x, int y, int z)
// ์
๋ ฅ : 3๊ฐ์ ์ ์
// ์ถ๋ ฅ : 1๊ฐ์ ์ ์
// ๋ฉ์๋ ์ด๋ฆ : mid
์๋2

์ฝ๋
import static org.junit.jupiter.api.Assertions.*; import java.util.Arrays; import org.junit.jupiter.api.Test; class MethodTest { // 3๊ฐ์ ์๋ฅผ ์ ๋ ฅ๋ฐ์์ ๊ทธ ์ค์ ๋ ๋ฒ์งธ๋ก ํฐ ์๋ฅผ ๋ฐํํ๋ ๋ฉ์๋ // mid(int x, int y, int z) // ์ ๋ ฅ : 3๊ฐ์ ์ ์ // ์ถ๋ ฅ : 1๊ฐ์ ์ ์ // ๋ฉ์๋ ์ด๋ฆ : mid static int mid(int x, int y, int z) { int[] num = {x, y, z}; int max = -1, maxIdx = -1; // max ๊ฐ, result ๋ฐฐ์ด max ๊ฐ์ index String mid = ""; // ์ต๋๊ฐ๊ณผ ์ต๋๊ฐ์ index๋ฅผ ๊ตฌํ๋ค. for (int i = 0; i < num.length; i++) { if (max < num[i]) { max = num[i]; maxIdx = i; } } // ์ต๋๊ฐ์ ์ ์ธํ ๋๋จธ์ง ๋ ๊ฐ์ ๊ตฌํ๋ค. for (int i = 0; i < num.length; i++) if (i != maxIdx) mid += num[i]; // ๋๋จธ์ง ๋ ๊ฐ์ค ๋ ํฐ ๊ฐ์ ๋ฐํํ๋ค. return mid.charAt(0) > mid.charAt(1) ? (int) mid.charAt(0) - '0' : (int) mid.charAt(1) - '0'; } @Test void test() { // ์ค๋ณต๊ฐ X - ์ต์๊ฐ๋ณด๋ค๋ ํฌ๊ณ ์ต๋๊ฐ๋ณด๋ค๋ ์๋ค. assertTrue(mid(1, 2, 3)==2); } @Test void test2() { // ์ต๋๊ฐ๋ณด๋จ ์์๋ฐ ๋์ผํ ๋๋จธ์ง ๋ ๊ฐ assertTrue(mid(2, 2, 3)==2); } @Test void test3() { // ์ต์๊ฐ๋ณด๋ค๋ ํฐ๋ฐ ๋์ผํ ๋๋จธ์ง ๋ ๊ฐ assertTrue(mid(2, 3, 3)==3); } @Test void test4() { // ์ธ ๊ฐ์ด ๋ชจ๋ ๋์ผํ๋ค. assertTrue(mid(1, 1, 1)==1); } }
์๋3
์ฝ๋
import static org.junit.jupiter.api.Assertions.*; import java.util.Arrays; import org.junit.jupiter.api.Test; class MidTest { // 3๊ฐ์ ์๋ฅผ ์ ๋ ฅ๋ฐ์์ ๊ทธ ์ค์ ๋ ๋ฒ์งธ๋ก ํฐ ์๋ฅผ ๋ฐํํ๋ ๋ฉ์๋ // mid(int x, int y, int z) // ์ ๋ ฅ : 3๊ฐ์ ์ ์ // ์ถ๋ ฅ : 1๊ฐ์ ์ ์ // ๋ฉ์๋ ์ด๋ฆ : mid static int mid(int x, int y, int z) { // 1, 2, 3 int max = x > y ? x : (y > z ? y : z); if (max == x) { return y > z ? y : z; } else if (max == y){ return x > z ? x : z; } else { // max == z return x > y ? x : y; } } @Test void test() { // ์ค๋ณต๊ฐ X - ์ต์๊ฐ๋ณด๋ค๋ ํฌ๊ณ ์ต๋๊ฐ๋ณด๋ค๋ ์๋ค. assertTrue(mid(1, 2, 3)==2); } @Test void test2() { // ์ต๋๊ฐ๋ณด๋จ ์์๋ฐ ๋์ผํ ๋๋จธ์ง ๋ ๊ฐ assertTrue(mid(2, 2, 3)==2); } @Test void test3() { // ์ต์๊ฐ๋ณด๋ค๋ ํฐ๋ฐ ๋์ผํ ๋๋จธ์ง ๋ ๊ฐ assertTrue(mid(2, 3, 3)==3); } @Test void test4() { // ์ธ ๊ฐ์ด ๋ชจ๋ ๋์ผํ๋ค. assertTrue(mid(1, 1, 1)==1); } }
1์ฃผ์ฐจ : ๋น๊ณ ๊ฐฏ์๋ฅผ ์ธ์ด์ ๋ฐํํ๋ bingoCnt()๋ฅผ ์์ฑ
11

์ฝ๋
import static org.junit.jupiter.api.Assertions.*; import java.util.Arrays; import org.junit.jupiter.api.Test; class BingoTest { // 5 X 5 ๋ฐฐ์ด์ ๋น๊ณ ๊ฐฏ์๋ฅผ ์ธ์ด์ ๋ฐํํ๋ bingoCnt()๋ฅผ ์์ฑ // ์ ๋ ฅ : int 2์ฐจ์ ๋ฐฐ์ด(๋น๊ณ ํ) // ์ถ๋ ฅ : int(๋น๊ณ ๊ฐฏ์) // ๋ฉ์๋ ์ด๋ฆ : bingoCnt() int bingoCnt(int[][] bingo) { int garoTmp = 0; // ๊ฐ๋ก ๋น๊ณ int[] seroTmp = new int[5]; // ์ธ๋ก ๋น๊ณ int[] diagonal = new int[2]; // ๋๊ฐ์ ๋น๊ณ int result = 0; for (int i = 0; i < bingo.length; i++) { for (int j = 0; j < bingo[i].length; j++) { if (bingo[i][j] == 1) { garoTmp++; seroTmp[j]++; if (i == j) diagonal[0]++; if (i + j == 4) diagonal[1]++; } } if (garoTmp == 5) result++; garoTmp = 0; } for (int i = 0; i < seroTmp.length; i++) if (seroTmp[i] == 5) result++; for (int i = 0; i < diagonal.length; i++) if (diagonal[i] == 5) result++; return result; } @Test void seroAndGarAndDiagonal() { // 3๋น๊ณ : ์ธ๋ก & ๊ฐ๋ก & ๋๊ฐ์ int[][] bingo = { {1,0,0,0,1}, {1,1,1,1,1}, {1,0,1,0,0}, {1,1,0,0,0}, {1,0,0,0,0}, }; assertTrue(bingoCnt(bingo) == 3); } @Test void seroAndGaro() { // 2๋น๊ณ : ์ธ๋ก & ๊ฐ๋ก int[][] bingo = { {1,0,0,0,0}, {1,1,1,1,1}, {1,0,0,0,0}, {1,0,0,0,0}, {1,0,0,0,0}, }; assertTrue(bingoCnt(bingo) == 2); } @Test void diagonalThree() { // 2๋น๊ณ : ๋๊ฐ์ ์ผ -> ์ค && ์ค -> ์ผ int[][] bingo = { {1,0,0,0,1}, {0,1,0,1,0}, {0,0,1,0,0}, {0,1,0,1,0}, {1,0,0,0,1}, }; assertTrue(bingoCnt(bingo) == 2); } @Test void diagonalTwo() { // 1๋น๊ณ : ๋๊ฐ์ ์ค -> ์ผ int[][] bingo = { {0,0,0,0,1}, {0,0,0,1,0}, {0,0,1,0,0}, {0,1,0,0,0}, {1,0,0,0,0}, }; assertTrue(bingoCnt(bingo) == 1); } @Test void diagonalOne() { // 1๋น๊ณ : ๋๊ฐ์ ์ผ -> ์ค int[][] bingo = { {1,0,0,0,0}, {0,1,0,0,0}, {0,0,1,0,0}, {0,0,0,1,0}, {0,0,0,0,1}, }; assertTrue(bingoCnt(bingo) == 1); } @Test void seroTwo() { // 2๋น๊ณ : ์ธ๋ก ๋ ์ค int[][] bingo = { {1,1,0,0,0}, {1,1,0,0,0}, {1,1,0,0,0}, {1,1,0,0,0}, {1,1,0,0,0}, }; assertTrue(bingoCnt(bingo) == 2); } @Test void garoOne() { // 1๋น๊ณ : ๊ฐ๋ก ํ ์ค int[][] bingo = { {1,1,1,1,1}, {0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}, }; assertTrue(bingoCnt(bingo) == 1); } @Test void garoTwo() { // 2๋น๊ณ : ๊ฐ๋ก ๋ ์ค int[][] bingo = { {1,1,1,1,1}, {0,0,0,0,0}, {0,0,0,0,0}, {1,1,1,1,1}, {0,0,0,0,0}, }; assertTrue(bingoCnt(bingo) == 2); } @Test void seroOne() { // 1๋น๊ณ : ์ธ๋ก ํ ์ค int[][] bingo = { {1,0,0,0,0}, {1,0,0,0,0}, {1,0,0,0,0}, {1,0,0,0,0}, {1,0,0,0,0}, }; assertTrue(bingoCnt(bingo) == 1); } }
1์์ for๋ฌธ์ด ๋๋ฌด ๋ง๋ค๊ณ 1๊ฐ๋ก ์ค์ด๋ผ๊ณ ํ์ ์ ๋ค์..!

์ฝ๋
import static org.junit.jupiter.api.Assertions.*; import java.util.Arrays; import org.junit.jupiter.api.Test; class BingoTest { // 5 X 5 ๋ฐฐ์ด์ ๋น๊ณ ๊ฐฏ์๋ฅผ ์ธ์ด์ ๋ฐํํ๋ bingoCnt()๋ฅผ ์์ฑ // ์ ๋ ฅ : int 2์ฐจ์ ๋ฐฐ์ด(๋น๊ณ ํ) // ์ถ๋ ฅ : int(๋น๊ณ ๊ฐฏ์) // ๋ฉ์๋ ์ด๋ฆ : bingoCnt() int bingoCnt(int[][] bingoArr) { int garoCnt = 0; // ๊ฐ๋ก ๋น๊ณ int seroCnt = 0; // ์ธ๋ก ๋น๊ณ int crossCnt1 = 0; // ๋๊ฐ์ 1 x == y int crossCnt2 = 0; // ๋๊ฐ์ 2 x + y == 4 int result = 0; for (int i = 0; i < bingoArr.length; i++) { if (bingoArr[i][i] == 1) crossCnt1++; if (bingoArr[i][4-i] == 1) crossCnt2++; for (int j = 0; j < bingoArr.length; j++) { if (bingoArr[i][j] == 1) garoCnt++; if (bingoArr[j][i] == 1) seroCnt++; } if (garoCnt == 5) result++; if (seroCnt == 5) result++; garoCnt = 0; seroCnt = 0; } if (crossCnt1 == 5) result++; if (crossCnt2 == 5) result++; return result; } @Test void all() { int[][] bingo = { {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, }; assertTrue(bingoCnt(bingo) == 12); } @Test void seroAndGarAndDiagonal() { // 3๋น๊ณ : ์ธ๋ก & ๊ฐ๋ก & ๋๊ฐ์ int[][] bingo = { {1,0,0,0,1}, {1,1,1,1,1}, {1,0,1,0,0}, {1,1,0,0,0}, {1,0,0,0,0}, }; assertTrue(bingoCnt(bingo) == 3); } @Test void seroAndGaro() { // 2๋น๊ณ : ์ธ๋ก & ๊ฐ๋ก int[][] bingo = { {1,0,0,0,0}, {1,1,1,1,1}, {1,0,0,0,0}, {1,0,0,0,0}, {1,0,0,0,0}, }; assertTrue(bingoCnt(bingo) == 2); } @Test void diagonalThree() { // 2๋น๊ณ : ๋๊ฐ์ ์ผ -> ์ค && ์ค -> ์ผ int[][] bingo = { {1,0,0,0,1}, {0,1,0,1,0}, {0,0,1,0,0}, {0,1,0,1,0}, {1,0,0,0,1}, }; assertTrue(bingoCnt(bingo) == 2); } @Test void diagonalTwo() { // 1๋น๊ณ : ๋๊ฐ์ ์ค -> ์ผ int[][] bingo = { {0,0,0,0,1}, {0,0,0,1,0}, {0,0,1,0,1}, {0,1,0,0,0}, {1,0,0,0,0}, }; assertTrue(bingoCnt(bingo) == 1); } @Test void diagonalOne() { // 1๋น๊ณ : ๋๊ฐ์ ์ผ -> ์ค int[][] bingo = { {1,0,0,0,0}, {0,1,0,0,0}, {0,0,1,0,0}, {0,0,0,1,0}, {0,0,1,0,1}, }; assertTrue(bingoCnt(bingo) == 1); } @Test void seroTwo() { // 2๋น๊ณ : ์ธ๋ก ๋ ์ค int[][] bingo = { {1,1,0,0,1}, {1,1,0,0,0}, {1,1,0,0,0}, {1,1,0,0,1}, {1,1,0,0,0}, }; assertTrue(bingoCnt(bingo) == 2); } @Test void garoOne() { // 1๋น๊ณ : ๊ฐ๋ก ํ ์ค int[][] bingo = { {1,1,1,1,1}, {0,0,0,0,0}, {0,0,0,1,0}, {0,0,0,0,0}, {0,0,1,0,0}, }; assertTrue(bingoCnt(bingo) == 1); } @Test void garoTwo() { // 2๋น๊ณ : ๊ฐ๋ก ๋ ์ค int[][] bingo = { {1,1,1,1,1}, {0,0,0,0,1}, {0,0,0,0,0}, {1,1,1,1,1}, {0,1,0,0,0}, }; assertTrue(bingoCnt(bingo) == 2); } @Test void seroOne() { // 1๋น๊ณ : ์ธ๋ก ํ ์ค int[][] bingo = { {1,0,0,0,0}, {1,0,0,1,0}, {1,0,1,0,0}, {1,0,0,0,0}, {1,0,0,1,0}, }; assertTrue(bingoCnt(bingo) == 1); } }
2์ฃผ์ฐจ
2์ฃผ์ฐจ์๋ ๊ตฌํํ๋ผ๋ ๊ณผ์ ๋ด์ฃผ์ จ๋๋ฐ ์ด ๊ณผ์ ์์ ์ค๊ณ, ๊ทธ๋ฆฌ๊ธฐ์ ์ค์์ฑ ํ ๋ฒ ๋ ๊นจ๋ฌ์..!
ํ์คํ ํ๊ธ๋ก ์คํ ๋ณ๋ก๋ก ๋ค ์ ๊ณ ๊ตฌํํ๋๊น ์ค์๋ ์ ์๋ค.
์ฒซ ์๋ ๋ ๊ทธ๋ฆผ ์ ๊ทธ๋ฆฌ๊ณ ๋จธ๋ฆฌ์ ์๊ฐ๋๋ก ๊ตฌํํ๋ค๊ฐ ํผ๋ฌ๋๋ฐ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ณ ๊ตฌ์กฐ ์ก๊ณ ๊ตฌํํ๋ ์ฝ๋ ๋ง์ด ๊น๋ํด์ก๋ค๊ณ ์นญ์ฐฌํด์ฃผ์ จ๋ค๐ฅน
TDD
ํ ์คํธ ์ฝ๋๊ฐ ๋๋ฌด ๋ง์ฐํ๊ณ ์ด๋ ต๊ฒ ๋๊ปด์ ธ์ ์๋ํ ์๊ฐ์กฐ์ฐจ ์ ํ์๋๋ฐ(์ฐ๋ฆฌ ํ์ฌ์์๋ ์ฐ์ง๋ ์๊ณ ์ธ์ ๊ฐ ๋ฐฐ์ฐ๊ฒ ์ง ๋จธ.. ํ๊ณ ๋ฌด์์ ๋ฏธ๋ฃธ ใ ใ โฆ) mid๋ ๋น๊ณ ๋ฌธ์ ํ๋ฉด์ ์ง์ ์ฌ์ฉํด๋ณด๋ ์ด๋ ๊ฒ ํธํ๊ณ ์ข์ ๊ฑด์ค ๋ชฐ๋๋ค. ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ์ง ์์๋ค๋ฉด ํ ์คํธ ์ผ์ด์ค๋ค์ ํ๋ํ๋ ๋ค ์คํํ๊ณ ๊ฒฐ๊ณผ๊ฐ ๋ง๋์ง ์ง์ ํ์ธ์ ํ์ด์ผ ํ๋๋ฐ ์ผ์ด์ค๋ฅผ ์์ฑํด์ ๋๋ฆฌ๋ ํ๋๋ถ์ธ์ง ๋นจ๊ฐ๋ถ์ธ์ง๋ง ๋ณด๋ฉด๋๋๊น ์์ ํธํ๋ค. ์ง์ ์ ์ฉํด๋ณด๊ณ ์จ๋ณด๋๊น ์๋ฟ๋๋ค.
๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์๊ฐํด๋ณด๊ณ ํ ์คํธ๋ฅผ ๋ง์ด ํด๋ด์ผ ํ๋ค. ํ ์คํธ ์ฝ๋๋ ํจ์จ์ ์ธ ํ์ ์๊ณ ๊ผผ๊ผผํ๊ฒ ํด์ผ ํ๋ค. ๋นํจ์จ์ ์ด์ด๋ ๊ผผ๊ผผํ๊ฒ ํ ์คํธ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
์ ์๋๊ป์ ํ ์คํธ ๊ด๋ จ ์ฑ ํ ๊ถ์ ์ฝ์ด๋ด์ผ ํ๋ค๊ณ ๋ง์ํด์ฃผ์ จ๋๋ฐ, ์ง๊ธ์ ์ฝ์ ์ฌ์ ๊ฐ ์๊ณ โฆ.,,, ์ฌ๊ธฐ๋ค ์ ์ด๋์์ผ๋๊น ์ธ์ ๊ฐ ์ฝ๊ฒ ์ง ํํ
์ฐ๋ ๋ชฉ์ : ํ ์คํธ ์๋ํ, ๋ฆฌํฉํ ๋ง(์ฝ๋๋ฅผ ๊ณ ์ณค์ ๋ ์์ฌํ๊ณ ๊ณ ์น ์ ์๋ค. ๋ญ ๋ณ๊ฒฝํ๋ ๋ฏธ์น๋ ์ํฅ ํ์ ๊ฐ๋ฅ)
์๋ฃ๊ตฌ์กฐ
Vector ํด๋์ค ๊ตฌํ
List ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ Vector ํด๋์ค๋ฅผ ๋ด๊ฐ ์ง์ ์์ฑํด๋ณด๋ ์ถ์ํ ๊ฐ๋ ์ด ์ข ๋ ์๋ฟ์๋ค.
์๋ฌด ์๊ฐ์์ด ์ ์ธ๋ถ๋ง ์๊ณ ํธ๋ฆฌํ๊ฒ ์ฐ๋ ๋ฉ์๋๋ค์ ๋ด๊ฐ ์ง์ ๊ตฌํํด๋ณด๋ ๊ทธ๋ฅ ๋ง๋ฒ์ฒ๋ผ ๋ฑ ๋๋ ๊ฒ ์๋๋ผ ใ ใ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๊ตฌํ์ด ๋์ด์์๊ณ ๋์์ ํ๋๊ตฌ๋ ํ๊ณ ์๊ฒ๋๋ ์ ๊ธฐํ๋ค.
์ด๋์ ์ถ์ํ๋ฅผํ๊ณ ์ธํฐํ์ด์ค๋ฅผ ์ฐ๋ ๊ฑฐ๊ตฌ๋ํ๊ณ ์๋ฟ์
์ ๋ฒ ์ฃผ์ ํ๋ MyVector ๊ตฌํ์ ์ด๋ฒ ์ฃผ ๊ณผ์ ๋ก ๋ด์ฃผ์ ์ ํ ๋ฒ๋ ํด๋ดค๋ค. ์ ๋ฒ ์ฃผ์ ๊ฐ์ด ๋ณด๊ณ ๋ฐ๋ผ์น๊ธฐ๋ง ํ๋ ๊ฒ ์๋๋ผ ์๊ตฌ์ฌํญ์ ๋ณด๊ณ ๋ด๊ฐ ์ง์ ๊ตฌํํ๋ ๊ฑฐ๋ผ ๋ ๊ธฐ์ต์ ์ ๋จ๊ณ ์ดํด๋๋ ๋ฌ๋๋ค.
๊ทธ๋ฅ ์๊ตฌ์ฌํญ๋ง ๋ดค์ ๋๋ ๊ฐ๋จํด๋ณด์๋๋ฐ ์๊ฐ๋ณด๋ค ๊ณ ๋ คํ ์์๋ค์ด ๋ง์๋ค. null๊ฐ์ด ๋ค์ด์จ๋ค๋์ง remove ๋ง์ง๋ง ์์๋ฅผ ์ญ์ ํ ๋๋ ๋ฐฐ์ด ๋ณต์ฌ๋ฅผ ํ์ง ์๋๋ค๋์ง ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ๋ ๋ฐฐ์ด์ capacity๊ฐ ๋ค ์ฐผ๋์ง ํญ์ ์ฒดํฌํด์ ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํด์ ๋ณต์ฌํด ๋ฐํํด์ค์ผ ํ๋ ๊ฒ, ๋ฐฐ์ด ๋ณต์ฌํ ๋๋ for๋ฌธ์ด ์๋๋ผ System.arraycopy(์๋๊ฐ ๋ ๋น ๋ฆ)๋ฅผ ์จ์ผ ํ๋ค๋ ๊ฒ ๋ฑ๋ฑ..
๋ฐฐ์ด์ด๋ผ๋ ์๋ฃ๊ตฌ์กฐ์ ๋ํด ๋ ์ ์ดํดํ๊ฒ ๋ ๊ฒ ๊ฐ๊ณ ์ฌ๋ฐ์๋ค. 16์ฅ๊น์ง ๋๋ด๋ฉด linkedList๋ HashMap, TreeSet๋ ์ง์ ๊ตฌํํด๋ณด๊ธฐ!
MyVector
package ch12; import java.util.ArrayList; import java.util.Arrays; public class MyVector { private Object[] objArr; private static final int DEFAULT_CAPACITY = 16; private int capacity; // ์ฉ๋ private int size; // ๊ฐ์ฒด์ ๊ฐ์ MyVector() { this(DEFAULT_CAPACITY); } MyVector(int capacity) { this.capacity = capacity; objArr = new Object[capacity]; } // ๊ฐ์ฒด์ ๊ฐ์ ๋ฐํ public int size() { return size; } public int capacity() { return capacity; } // ๊ฐ์ฒด ๋ฐฐ์ด์ด ๋น์๋์ง ํ์ธํ๋ค public boolean isEmpty() { return capacity < 1; } /** * ๊ธฐ๋ฅ : ๊ฐ์ฒด๋ฐฐ์ด objArr์ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ๋ ๋ฉ์๋ * ๋ฉ์๋๋ช : add * ๋ฐํํ์ : void * ๋งค๊ฐ๋ณ์ : Object obj */ public void add(Object obj) { // objArr ์ฉ๋์ด ๋ค ์ฐจ์ง ์์์ ๋๋ง ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ ์ ์๋ค. if (objArr.length == size) { objArr = grow(); // // ์ฉ๋์ ๋๋ฆฐ๋ค.(+16) } objArr[size++] = obj; } /** * ๊ธฐ๋ฅ : ๋ฐฐ์ด์ด ๋ค ์ฐผ์ ๊ฒฝ์ฐ DEFAULT_CAPACIT Y(16)๋งํผ ๊ธธ์ด๋ฅผ ๋๋ฆฐ ๋ฐฐ์ด์ ๋ฐํํด์ค๋ค. * ๋ฉ์๋๋ช : grow() * ๋ฐํํ์ : Object[] * ๋งค๊ฐ๋ณ์ : ์์ */ public Object[] grow() { /** * 1. ํ์ฌ ๋ฐฐ์ด์ capacity๋ณด๋ค + DEFAULT_CAPACITY(16)ํ Object ๋ฐฐ์ด tmp๋ฅผ ์์ฑํ๋ค. * 2. objArr์ ๋ด์ฉ์ tmp์ ๋ณต์ฌํ๋ค. * 3. tmp์ ์ฃผ์๊ฐ์ ๋ฐํํ๋ค. */ capacity = size + DEFAULT_CAPACITY; Object[] tmp = new Object[capacity]; System.arraycopy(objArr, 0, tmp, 0, size); return tmp; } /** * ๊ฐ์ฒด๋ฐฐ์ด objArr์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ Object get(index)๋ฅผ ์์ฑ */ public Object get(int index) { // index๊ฐ ์ ํจํ ๊ฐ์ด์ด์ผ ํ๋ค. // index๊ฐ 0๋ณด๋ค ์๊ฑฐ๋ size๋ ๊ฐ๊ฑฐ๋ ํด ๊ฒฝ์ฐ // 0 <= index < size if (!(0 <= index && index < size)) throw new IndexOutOfBoundsException("์ ํจํ ๊ฐ์ด ์๋๋๋ค."); return objArr[index]; } /** * ๊ธฐ๋ฅ : ๊ฐ์ฒด ๋ฐฐ์ด objArr์์ ์ง์ ๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋์ด ์๋ ์์น(index)๋ฅผ ๋ฐํํ๋ int indexOf(Object obj)๋ฅผ ์์ฑํ์์ค. * ex) "๊ฐ", "๋", "๋ค"๋ฅผ ์ ๋ ฅํ์ผ๋ฉด "๋"๋ฅผ ์ ๋ ฅ๋ฐ์ ๊ฒฝ์ฐ 1์ ๋ฐํํด์ค์ผํจ * ๋ฉ์๋๋ช : indexOf * ๋งค๊ฐ๋ณ์ : Object obj * ๋ฐํํ์ : int */ public int indexOf(Object obj) { /** * ๊ฐ์ฒด ๋ฐฐ์ด objArr์์ obj๋ฅผ ์ฐพ์์ผ ํ๋ค. * objArr ๊ธธ์ด๋งํผ์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ objArr[i]์ obj๊ฐ ๊ฐ์ ๊ฐ์ ์ฐพ์์ผ ํจ */ for (int i = 0; i < size; i++) { if (obj == null) { if (objArr[i] == null) return i; } else { if (obj.equals(objArr[i])) return i; // objArr[i]์ equals๋ฅผ ํธ์ถํ๋ ๊ฑฐ์ ๋ค์ด๊ฐ์๋ ๊ฐ์ด ์ ์๋ฉด Integer.equals } } return -1; } /** * ๊ธฐ๋ฅ : ๊ฐ์ฒด๋ฐฐ์ด objArr์์ ์ง์ ๋ ๊ฐ์ฒด๋ฅผ ์ญ์ ํ๋ boolean remove(Object obj)๋ฅผ ์์ฑํ์์ค.(indexOf()๋ฅผ ์ด์ฉํ ๊ฒ) * +) ๋ง์ฝ ์ญ์ ํ๋ ค๋ ๋ฐ์ดํฐ๊ฐ * ๋ฉ์๋๋ช : remove * ๋งค๊ฐ๋ณ์ : Object obj * ๋ฐํํ์ : boolean */ public Object remove(Object obj) { int idx = indexOf(obj); if (idx != size - 1) { System.arraycopy(objArr, idx + 1, objArr, idx, size - idx - 1); } objArr[size - 1] = null; // ๋ง์ฝ์ size๊ฐ 5์์ 4๋ก ๋ณ๊ฒฝ์ด ๋์๋๋ฐ,, size--; return objArr[idx]; } @Override public String toString() { return "objArr=" + Arrays.toString(objArr) + ", capacity=" + capacity + ", size=" + size; } public static void main(String[] args) { ArrayList test2 = new ArrayList(); test2.add(null); test2.add(3); System.out.println("test2.indexOf(3) = " + test2.indexOf(3)); MyVector test = new MyVector(1); test.add(null); test.add(3); System.out.println("test.indexOf(3) = " + test.indexOf(3)); System.out.println("test.indexOf(null) = " + test.indexOf(null)); } }
๋ง์ธ๋์
- ํ์ธ์ ์์ ์ ๊ฐํ์ง ๋ง ๊ฒ. ๋ณธ์ธ ์ค์ค๋ก ํ๊ณ๋ฅผ ๊ท์ ์ง์ง ๋ง๊ธฐ
- ์ํฅ๋ ฅ์๋ ์ฌ๋์ด ๋์ด์ผ ํ๋ค. ๋ด ์ค๋ ฅ์ ๋ฝ๋ด๊ธฐ๋ณด๋ค๋ ๋จ๋ค์ ๋์์ค์ผ ํ๋ค.
6๊ฐ์ ๋์ ๋ฐฐ์ฐ๋ฉด์ ์ป์ด๊ฐ์ผ ํ ๊ฒ / ํ์ต
- ๋๋ง์ ๋ฌธ์ ํด๊ฒฐ ํ๋ก์ธ์ค๋ฅผ ์ค์ค๋ก ๊ฐ์ถ๋ ๊ฒ ์ค์ํ๋ค. ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋๋ผ๋ ์ถฉ๋ถํ ์๊ฐ์ ๊ฐ๊ณ ๋๋ง์ ๋ต์ ์ฐพ์์ผ ํ๋ค.
- ์์ ์ ์๊ฐ์ ์๋ ผ, ํ ์ํ๋ ์ต๊ด โ ์ค๋ฌด์์ ํ์์ ์ธ ๋ฅ๋ ฅ
- ๋ํ
์ผ์ ์ง์ฐฉํ์ง ๋ง๊ณ ํต์ฌ๋ง ๊ธฐ์ตํ๊ธฐ
๊ฐ๋ ์ ์ถ์ํํด์ ๊ธฐ์ตํ๋ ์ฐ์ต์ ํด์ผ ํ๋ค. ๊ณตํต ํต์ฌ ๋ถ๋ถ๋ง ์์ถํด์ ์ธ์ฐ๊ณ ๋ํ ์ผ์ ์ดํดํ๊ณ ๋ฒ๋ ค์ฌํจ
- ์ข์ ์ฑ
์ ๊ฐ๊น์ดํด์ผ ํ๋ค.
์์์ ์ง์น๊ณ ๊ฒ์์ ์์กดํ๊ฒ๋๋ค. ์จ๋ผ์ธ ๊ฐ์ข ๋ช ๊ฐ ๋ดค๋ค๊ณ ์ข์ ๊ฐ๋ฐ์ ๋๋ ๊ฑฐ ์๋. ์ด๋ถ๋ณด๋ค๋ ์ข ์ด์ฑ ๋ณผ ๊ฒ. 2D๋ 3D๋ฅผ ์ด๊ธฐ์ง ๋ชปํ๋ค.
- ๊ธฐ์ ์ ์ข
์๋ ํ์ X
์๋ฐ๋ฅผ ํตํด์ OOP๋ฅผ ๋ฐฐ์ฐ๋ ๊ฒ ์๋ฐ๋ฅผ ๋ฐฐ์ฐ๋ ๊ฒ ์๋ ใดใด ์๋ฐ๋ฅผ ํตํด์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ฐฐ์ฐ๋ ๊ฒ
- ์๋ฌ ๋ฉ์์ง
์๋ฌ ๋ฉ์์ง ๋ณด๋ ๊ฒ ๊ต์ฅํ ์ค์ํ๋ค. ์๋ฌ๊ฐ ๋ฐ์๋๋ฉด ์ถ์ธกํ์ง ๋ง๊ณ ์๋ฌ ๋ฉ์์ง ๊ผญ ์ฝ์ด๋ณผ ๊ฒ
- ์ฃผ์
์ฃผ์์ ํ์ํ ๋ ์ ์ ํ ์ ์ผ๋ฉด ๋์ง๋ง ์ง๊ธ ๋ฐฐ์ฐ๋ ๋จ๊ณ์์๋ ์ต๋ํ ๋ง์ด ์ ์ด์ผ๋จ
์๊ฐ์ ๋ฆฌ = ์ฃผ์, ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๋ผ๋ ๊ฒ๊ณผ ๊ฐ์ ๋งฅ๋ฝ
- CS ์ฐ์ ์์
CS ์ง์ ๋ถ์กฑํ๊ฒ ์ปดํ๋ ์ค์๋๋ฐ,, ๋ํํ ์ ๋ง ํ์ํ๋ ๊ณต๋ถ ์ฐ์ ์์์ ๋ํด ์๋ ค์ฃผ์ จ๋ค.
- ์๋ฃ๊ตฌ์กฐ : ํฌ์ ๋๋น ์์ํ์ด ์ ์ผ ์ข๊ณ ์ฐ์ ์์ ๋์. ๊พธ์คํ ํํํ ๋ด์ผ ํ๋ค. ์๋ฐ์ ์ ์ 11์ฅ์ด ์๋ฃ๊ตฌ์กฐ์ ๊ธฐ์ด๊ฐ๋จ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋คํธ์ํฌ
- ์ด์์ฒด์ : ์์ ์์ค์ผ๋ก๋ง ๋ณด๋ฉด๋๊ณ ๋๋ฌด ๊น๊ฒ ๋ณด๋ฉด ์๋จ, ์ฅ๊ธฐ์ ์ผ๋ก ์กฐ๊ธ์ฉ ๋ณด๊ธฐ
์๋ฃ๊ตฌ์กฐ
์ด๋ฌ์ ํ์ตํ ๋ด์ฉ

์์ฐ์ฑ
Vim
๋ด๊ฐ ๊ทนํ์ ํจ์จ์ ์ถ๊ตฌํ๋ ์ฌ๋์ธ ๊ฑธ ์ด๋ป๊ฒ ์์๊ณ ์ ์๋๊ป์ vim ์จ๋ณด๋ฉด ์ข์ํ ๊ฒ ๊ฐ๋ค๊ณ ์๋ ค์ฃผ์ จ๋ค ใ ใ vim์ ์กด์ฌ๋ ์๊ณ ์์์ง๋ง ๋ฑํ ์จ๋ณผ ์๊ฐ์ ๋ค์ง ์์์๋๋ฐ ์จ๋ณด๋ ์์ ์ ์ธ๊ณ์..!
- ํค ์กฐํฉํด์ ์ธ ์ ์๋ ๊ฒ
- ํ์ฌ ์ฌ์ฉ ์ค์ธ ํค๋ณด๋ ์ ์๋ ์ด๋ ํค์์์ ์ด๋ํ ๋๋ง๋ค ๋ถํธํ์๋๋ฐ hjkl๋ก ๋์ฒดํ ์ ์์ด์ ๋๋ฌด ์ข๋ค
- ์์ด ๋ง์ฐ์ค๋ก ๊ฐ์ง ์์์ ํ๋ฆ์ด ๋๊ธฐ์ง ์์
์ง๊ธ์ ์ ์ ๋จ๊ณ๋ผ ๋๋ฑ๋์ง๋ง ์ต์ํด์ง๋ฉด ์์ฐ์ฑ ์ฅ๋ ์๋ ๊ฒ ๊ฐ๋ค
Uploaded by N2T