๐ ํ๋ก๊ทธ๋๋จธ์ค / ์๊ฐ ์ฝ๋ ์ฑ๋ฆฐ์ง ์์ฆ 1 / Level 2 / ์ผ๊ฐ ๋ฌํฝ์ด
๐ ๋ฌธ์
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ซ ์ ํ ์ฌํญ
- n์ 1 ์ด์ 1,000 ์ดํ์ ๋๋ค.
๐ ์ ์ถ๋ ฅ ์
| n | result |
| 4 | [1,2,9,3,10,8,4,5,6,7] |
| 5 | [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] |
| 6 | [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11] |
๐ค ํ์ด ๋ฐฉ๋ฒ
1๏ธโฃ ์ขํํ
โก๏ธ ์ด ๋ฌธ์ ์์ ์ค์ํ ํฌ์ธํธ๋ ์๊ณ ๋ฐฉํฅ์ผ๋ก ๋๊ธฐ ๋๋ฌธ์ ๊ฐ ์ธต๋ง๋ค ์ฐจ๋ก๋๋ก ๊ฐ์ ์ ์ฅํ๊ธฐ ์ด๋ ต๋ค๋ ๊ฒ์ธ๋ฐ, ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ๊ฐ ์์น๋ฅผ ์ขํํ ํ์๋ค.

โก๏ธ 2์ฐจ์ ๋ฐฐ์ด์ ์์ฑํ์ฌ ์์น ๋ณ๋ก ๊ฐ์ ์ ์ฅํ ์ ์๋๋ก ํ์๋ค.
2๏ธโฃ ๊ท์น ์ฐพ๊ธฐ
โก๏ธ ๊ท์น์ ํ์ธํด๋ณธ ๊ฒฐ๊ณผ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์๋ค.

โก๏ธ ์ด๋ ๋ฐฉํฅ์ด ์๊ณ ๋ฐฉํฅ์ด๋ฏ๋ก โ ์๋ (down) / โก ์ค๋ฅธ์ชฝ (right) / โข ์ (up) ์์๋ฅผ ๋ฐ๋ณตํ๋ฉด์, ๋์์ ์ด๋ ํ์๋ ์ด๊ธฐ์ ์ฃผ์ด์ง๋ n ๊ฐ์์ ํ๋์ฉ ๊ฐ์ํ๋ ํํ๋ฅผ ๋ณด์๋ค. ๋ฐ๋ผ์ ํด๋น ๊ท์น์ ๋ฐํ์ผ๋ก ์ฝ๋๋ฅผ ๊ตฌ์ฑํ์๋ค.
โก๏ธ ๋ํ ์ขํ์ด๋ ๊ท์น์ ์๋์ ๊ฐ์๋ค.
โ ์๋ (down) โก๏ธ x ์ขํ ๋ง 1์ฉ ์ฆ๊ฐ
โก ์ค๋ฅธ์ชฝ (right) โก๏ธ y ์ขํ ๋ง 1์ฉ ์ฆ๊ฐ
โข ์ (up) โก๏ธ x, y ์ขํ ๋ชจ๋ 1์ฉ ๊ฐ์
3๏ธโฃ ์ฝ๋
class Solution {
public static int[][] tri;
// ๋ค์ด๊ฐ ์ซ์
public static int tmp = 1;
public static int x = -1;
public static int y = 0;
public int[] solution(int n) {
// ์ธต ๋ง๋ค ์ซ์๋ฅผ ๋ด์ ๋ฐฐ์ด
tri = new int[n][n];
// ์ด๋ ๋ฐฉํฅ ํ์ธ (down ๋ถํฐ ์์)
boolean down = true;
boolean right = false;
boolean up = false;
// ์๊ณ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ฉด์ ๋ฐฐ์ด ์ฑ์
for (int i=n; i>0; i--) {
if (down) {
down(i);
// down โก๏ธ right
down = false;
right = true;
}
else if (right) {
right(i);
// down โก๏ธ up;
right = false;
up = true;
}
else if (up) {
up(i);
// up โก๏ธ down
down = true;
up = false;
}
}
// ์ธต ์์๋๋ก answer ์ ์ถ๊ฐ
int[] answer = new int[tmp-1];
int idx = 0;
for (int m=0; m<n; m++) {
for (int u=0; u<m+1; u++) {
answer[idx++] = tri[m][u];
}
}
return answer;
}
public static void down (int step) {
for (int i=0; i<step; i++) {
x++;
tri[x][y] = tmp;
tmp ++;
}
return;
}
public static void right (int step) {
for (int i=0; i<step; i++) {
y++;
tri[x][y] = tmp;
tmp++;
}
return;
}
public static void up (int step) {
for (int i=0; i<step; i++) {
x--;
y--;
tri[x][y] = tmp;
tmp++;
}
return;
}
}
4๏ธโฃ ๊ฒฐ๊ณผ

โก๏ธ ํ ์คํธ ์ผ์ด์ค๋ ๋ชจ๋ ํต๊ณผํ์์ผ๋, ํ์ฌ๋ ์กฐ๊ธ ๋นํจ์จ์ ์ธ ์ฝ๋๋ผ๊ณ ์๊ฐํด์ ํจ์จ์ฑ ํ ์คํธ๊ฐ ์์๋ค๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ ์๋ ์์์ ๊ฒ ๊ฐ๋ค.
๐ป ํ์ด ์ฝ๋
[level 2] Title: ์ผ๊ฐ ๋ฌํฝ์ด, Time: 19.16 ms, Memory: 132 MB -BaekjoonHub · Young998904/Practice_Algorithm_Auto@b08764a
Show file tree Showing 2 changed files with 157 additions and 0 deletions.
github.com