๊ณจ๋3
ํ์ ์ถ๊ฐ๋ Node
ํด๋์ค๋ฅผ ์ ์ํ๋ค. Node
ํด๋์ค๋ ๋ค์์ ํ๋๋ฅผ ๊ฐ๋๋ค
int y
, int x
int dist
: ํ์ฌ๊น์ง์ ๊ฑฐ๋ฆฌboolean brokeWall
: ์ฌํ 1๊ฐ์ ๋ฒฝ์ ๋ถ์๋์ง ์ฌ๋ถ์ฐ์ BFS์ ๊ธฐ๋ณธ์ธ, ์ฌ๋ฐฉํ์์ ํตํด ๋ค์์ผ๋ก ๋ฐฉ๋ฌธํ๋ ค๋ ๋
ธ๋๊ฐ ์ด๋ฏธ ๋ฐฉ๋ฌธ๋์๋์ง ์ฌ๋ถ๋ฅผ ์ฒดํฌํด์ผ ํ๋ค. ์ด๋ฅผ ์ํด visited
๋ฐฐ์ด์ ๊ด๋ฆฌํ ๊ฒ์ธ๋ฐ, ๋ฒฝ์ ๋ถ์๊ณ ๋ฐฉ๋ฌธํ ๊ฒฝ์ฐ์, ๋ฒฝ์ ๋ถ์์ง ์๊ณ ๋ฐฉ๋ฌธํ ๊ฒฝ์ฐ์ ๊ฒฝ๋ก๊ฐ ๊ฐ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ตฌ๋ถํด์ ์ ์ฅํด์ผ ํ๋ค.
int[][][] visited = new int[N][M][2];
// ๋ฒฝ์ ํ ๋ฒ๋ ๋ถ์์ง ์๊ณ ์จ ๊ฒฝ๋ก๋ก ํ์ฌ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค
visited[ny][nx][0] = 1;
// ๋ฒฝ์ ํ ๋ฒ ๋ถ์๊ณ ์จ ๊ฒฝ๋ก๋ก ํ์ฌ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
visited[ny][nx][1] = 1;
๋ค์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ค๋ฉด ๊ผญ ํ์ํ ๊ณตํต ์กฐ๊ฑด์ ๋ฐฉ๋ฌธ๋ ์ ์๋ ๋ ธ๋์ฌ์ผ ํ๋ ๊ฒ์ด๋ค.
์์์ visited
์ 3์ฐจ ๋ฐฐ์ด๋ก ๊ตฌํํ ๊ฒ์์ ์ ์ ์๋ฏ์ด, ๋
ธ๋ ํด๋์ค์ brokeWall
๋ณ์๋ฅผ ํ์ฉํด์ ์ฌํ ๋ฒฝ์ ๋ถ์๋์ง ํ์ธํ๊ณ , ํด๋น ์ํ(๋ฒฝ ๋ถ์๋์ง ์ฌ๋ถ)์ ๋ํ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํ์ธํด์ผ ํ๋ค.
brokeWall==true
, ์ฆ ์ด๋ฏธ ๋ฒฝ์ ๋ถ์ ์ํ๋ผ๋ฉด visited[ny][nx][1]
์ ๋ฐฉ๋ฌธ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ ์
๋ฐ์ดํธํด์ผ ํ๋ค.
์ด ์กฐ๊ฑด๊ณผ ํจ๊ป, ๋ค์ ์ธ๊ฐ์ง ์กฐ๊ฑด ์ค ํ๋๋ฅผ ๋ง์กฑํ๋์ง ํ์ธํด์ผ ํ๋ค.
์ด๋ฏธ ๋ฒฝ์ ๋ถ์๊ณ , ๋ค์์ผ๋ก ๋ฐฉ๋ฌธํ ๋ ธ๋๋ ๋ฒฝ์ด๋ฉด ์ต๋ 1๊ฐ์ ๋ฒฝ๋ง ๋ถ์ ์ ์๋ค๋ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ ์ ์๊ธฐ ๋๋ฌธ์ ํจ์คํ๋ค.
current.brokeWall
grid[ny][nx]==0
visited[ny][nx][1]==0
if (current.brokeWall && grid[ny][nx] == 0 && visited[ny][nx][1] == 0) {
queue.add(new Node(ny, nx, current.dist + 1, true));
visited[ny][nx][1] = 1;
}
!current.brokeWall
grid[ny][nx]==0
visited[ny][nx][0]==0
if (!current.brokeWall && grid[ny][nx] == 0 && visited[ny][nx][0] == 0) {
queue.add(new Node(ny, nx, current.dist + 1, false));
visited[ny][nx][0] = 1;
}
!current.brokeWall
grid[ny][nx]==1
visited[ny][nx][1]==0
if (!current.brokeWall && grid[ny][nx] == 1 && visited[ny][nx][1] == 0) {
queue.add(new Node(ny, nx, current.dist + 1, true));
visited[ny][nx][1] = 1;
}
๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ ๋ฐฑ์ค #2206 ํ์ด ์ฝ๋
์ด๋ฒ ์ฝ์ง์ ๊ฐ์ฅ ์น๋ช ์ ์ธ ์ ์ distance๋ฅผ ๋ฐฐ์ด๋ก ๊ด๋ฆฌํ๊ฒ ๋ค๋ ํ์ ๋ฐํ ์ฌ๊ณ ์๋ค. ๋ฐฉ๋ฌธ์ฌ๋ถ์ distance๋ฅผ ํ๋์ ๋ฐฐ์ด๋ก ๊ด๋ฆฌํ๋ ์ฝ๋์ ๋จ์ ์ ๋ผ์ ๋ฆฌ๊ฒ ๋๊ผ๋ค.
๋ฐฉ๋ฌธํ๋์ง,
์ด๋ฒ์๋ ny
, nx
์ธ๋ฑ์ค ๊ฐ์ด ๊ทธ๋ฆฌ๋์ ์ธ๋ฑ์ค ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด continueํ๋๋ก ๊ตฌ์กฐ๋ฅผ ๋ฐ๊ฟ๋ดค๋ค.
์๋๋ ๋ฒ์ ๊ฐ ๋ด๋ฉด ์ฝ๋๋ฅผ ์ํํ๋ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์งฐ์๋๋ฐ, ์ ๋ฐฉ๋ฒ์ด ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋ ๋์์ด ๋๋ ๊ฒ ๊ฐ๋ค.
[Gold V] ํ๋
ธ์ด ํ ์ด๋ ์์ #11729
[Gold V] ํ๋
ธ์ด ํ #1914
ํ๋ ธ์ด ํ์ ๋ํ์ ์ธ ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ธ๋ฐ, ์ค๋ ์ฒซ ๋ง๋จ์ ์น๋ค๋ค.
์์ ๋๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด์ ์ฒซ ํ์ ์๋ n๊ฐ์ ์ํ๋ค์ ๋ชจ๋ ์ธ๋ฒ์งธ ํ์ผ๋ก ์ฎ๊ฒจ์ผ ํ๋ค. ๋๋ฒ์งธ ํ์ ๋ณด์กฐ ํ์ผ๋ก ์ฌ์ฉํ๋ฉด ๋๋ค.
์์ง ์ํ์ด 2๊ฐ ์ด์ ์๋ ๊ฒฝ์ฐ์๋ ์ํ์ ๋คํ ์ด๋ํด์ผ ํ๋ค.
3๊ฐ์ ์ํ์ผ๋ก ์์๋ฅผ ๋ค์ด๋ณด์
-
---
-----
A B C
์์์๋ A ์์น์ ์ํ 3๊ฐ ๋ชจ๋ ๋น์น๋์ด์๊ณ , ์ฐ๋ฆฌ์ ๋ชฉํ๋ ๋ชฉ์ ์ง์ธ C์ 3๊ฐ์ ์ํ์ ๋ชจ๋ ์ด๋์ํค๋ ๊ฒ์ด๋ค.
๊ธธ์ด 1์ ์ํ์ 1๋ฒ ์ํ, ๊ธธ์ด 3์ ์ํ์ 2๋ฒ ์ํ, ๊ธธ์ด 5์ ์ํ์ 3๋ฒ ์ํ์ด๋ผ ๊ฐ์ ํ์.
3๋ฒ ์ํ๋ถํฐ ์ฐจ๋ก๋ก C์ ๋๋ฌํด์ผ ๋๊ธฐ ๋๋ฌธ์ 1๋ฒ๊ณผ 2๋ฒ ์ํ์ B์ ์์นํด์ผ ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค. 2๋ฒ ์ํ์ด B์ ์์ด์ผ 1๋ฒ ์ํ์ ๊ทธ ์์ ์์ ์ ์๊ธฐ ๋๋ฌธ์ 1๋ฒ ์ํ์ ์ด๋ํ๋ ์์ ์๋ B๊ฐ ๋น์ด์์ด์ผ ํ๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ 1๋ฒ ์ํ์ C๋ก ์ด๋์ํจ๋ค.
---
----- -
A B C
๊ทธ ๋ค์ 2๋ฒ ์ํ์ ์์ง์ผ ์ ์์ผ๋ B๋ก ์ด๋์ํจ๋ค.
----- --- -
A B C
์ด์ 3๋ฒ ์ํ์ C๋ก ์ด๋์์ผ์ผ ํ๋ C์ ์๋ 1๋ฒ ์ํ์ B๋ก ์ด๋ ์ํค์. B์ ์๋ 2๋ฒ ์ํ๋ณด๋ค 1๋ฒ ์ํ์ ๊ธธ์ด๊ฐ ๋ ์งง์ผ๋ 2๋ฒ ์์ ์ฌ๋ฆด ์ ์๋ค.
-
----- ---
A B C
์ด์ A์ ์๋ 3๋ฒ ์ํ์ ์์ง์ผ ์ ์๋ค. C๋ก ์ด๋ ์ํค์.
-
--- -----
A B C
B์ ์๋ 1๋ฒ๊ณผ 2๋ฒ ์ํ๋ C๋ก ์ฎ๊ฒจ์ฃผ๋ ค๋ฉด 2๋ฒ ์ํ๋ถํฐ 3๋ฒ ์ํ ์๋ก ์ฎ๊ฒจ์ค์ผ ํ๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด์๋ 1๋ฒ ์ํ์ A๋ก ์ฎ๊ธด ๋ค์, 2๋ฒ ์ํ์ C๋ก ์ด๋์ํค์.
---
- --- ----- -> - -----
A B C A B C
๋ง์ง๋ง์ผ๋ก A์ 1๋ฒ ์ํ์ C๋ก ์ด๋์์ผ์ ํ๋ ธ์ด ์ํ์ ์์ฑ์ํจ๋ค.
-
---
-----
A B C
์ฌํ๊น์ง์ ๊ณผ์ ์ "X" ์์น์ ๊ฐ์ฅ ์ ์ํ์ "Y" ์์น๋ก ์ด๋ํ๋ค๋ ์๋ฏธ์์ "X Y"๋ก ํํํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค
A C
A B
C B
A C
B A
B C
A C
A๋ฅผ 1, B๋ฅผ 2, C๋ฅผ 3์ผ๋ก ๋ฐ๊ฟ์ ๋ณด๋ฉด #1914์์ ์์ ์ ์ถ๋ ฅ๊ณผ ๊ฐ์์ ํ์ธํ ์ ์๋ค.
์ฌ๊ท๋ฅผ ํ์ถํ๋ ๋ฒ ์ด์ค ์ผ์ด์ค์ ์กฐ๊ฑด์ ์ํ์ ์๊ฐ 1๊ฐ์ผ ๋๋ค. ์ด ๋๋ ํ์ฌ ์ํ์ ์์น์์ ๋์ฐฉ์ง์ ์์น๋ก ์ด๋ํ๋ฉด ๋์ด๋ค.
์ฆ, start
์ ํ์ฌ ์์น๋ผ ๊ฐ์ ํ๊ณ , dest
๊ฐ ๋ชฉ์ ์ง๋ฉด ์ด ๊ฒฝ์ฐ์ ๊ฒฝ๋ก๋ start
ํ์ ์ํ์ dest
ํ์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ด๋ค.
๊ฒฐ๊ตญ ์ํ์ ์์์ ์์ ๋ชฉ์ ์ง๋ก ์ด๋ํ๊ธฐ ์ํด์๋ ๋ค์์ ์ํํ๋ค.
์ฝ๋๋ก ์ง๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
static void hanoi(int numPlates, int start, int by, int dest) {
if (N == 1) { // ๋ฒ ์ด์ค์ผ์ด์ค
sb.append(start).append(" ").append(dest).append("\n");
return;
} else {
hanoi(numPlates - 1, start, dest, by);
sb.append(start).append(" ").append(dest).append(NEW_LINE);
hanoi(numPlates - 1, by, start, dest);
}
}
์ฌ์ค ํ๋
ธ์ด ํ ๋ฌธ์ ์ค์์๋ ๊ทธ๋ฅ ์ฌ๊ทํจ์ ์์์ ๋ฒ ์ด์ค์ผ์ด์ค ํธ์ถ ํ์์ ๋ํด ์นด์ดํฐ๋ฅผ ์ฆ๊ฐ์์ผ ์ด ์ด๋ํ์๋ฅผ ๊ฒ์ฐํ ์ ์๋ ๋ฌธ์ ๋ค๋ ์๋ค.
ํ์ง๋ง ํ๋
ธ์ดํ #1914 ์ ๊ฐ์ ๊ฒฝ์ฐ์๋ N ์
๋ ฅ๊ฐ์ด 20 ์ด๊ณผ๋ฉด ์ฌ๊ท ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ด ์๋ ์ด๋ ํ์๋ง ์ถ๋ ฅํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๊ณ์ฐ์ ํด์ผ ํ๋ค. ํนํ ๊ทธ ์ ๋๋ก ํฐ ์
๋ ฅ๊ฐ์ด๋ฉด ์ฌ๊ท๊ฐ ๋ฏธ์น๋ฏ์ด ๊น์ด์ง ๊ฒ์ด๋ค.
๋ฐฑ์ค #1914์์ N์ ์ต๋ ์ ๋ ฅ๊ฐ์ 100์ด๊ธฐ ๋๋ฌธ์ 3๋ฒ์์ ํ์ธํ ์ด ์ด๋ํ์ ๊ณ์ฐ์์ ๋ฐ๋ฅด๋ฉด 2^100-1์ผ๋ก long ํ์ ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๊ฒ ๋๋ค.
๊ทธ๋์ long๋ณด๋ค ํฐ ๋ฒ์๋ฅผ ํ์ฉํ๋ java.math.BigInteger
๋ฅผ ํ์ฉํด์ผ ํ๋ค.
[JAVA] long๋ณด๋ค ํฐ ์ซ์ BigInteger
๊ฐ๋จํ ์ ๊ณฑ ์ฐ์ฐ ๋ฉ์๋๋ฅผ ํตํด ๊ตฌํ๋ฉด ๋๋ค.
private static BigInteger solve(int N) {
BigInteger two = new BigInteger("2");
return two.pow(N).subtract(new BigInteger("1"));
}
๊ณจ๋4
์ซ์ ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ค.
๋์ ์ค๋ฅธ์ชฝ์ ์๋ ์ ์ค ๋๋ณด๋ค ํฐ ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ฅผ ์ฐพ๋ ๊ฒ.
nums[i]์ ์คํฐ์์ธ nums[j]๋ ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค
๋ฐฐ์ด์ ์คํ์ ๋ด์ ํ์ดํ๊ณ ์ ํ๋ค.
์คํ์๋ ์์ง ์คํฐ์๋ฅผ ๋ง๋์ง ๋ชปํ ์ซ์๋ค์ ์ธ๋ฑ์ค๋ฅผ ๋ด๊ณ , ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ 1๋ถํฐ ์์ฐจ์ ์ผ๋ก ๋น๊ตํ๋ค.
๋ง์ฝ ์คํ์ ๋จธ๋ฆฌ ๊ฐ๋ณด๋ค ํฐ ๊ฐ์ ๋ฐฐ์ด์์ ๋ง๋๋ฉด, ์ด๋ ์คํ์ ๋ชจ๋ ์์๋ณด๋ค ํฌ๋ค๋ ๊ฒ์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์ stack์ ๋ชจ๋ ์ธ๋ฑ์ค์ ์ด ๋ฐฐ์ด ๊ฐ์ ์คํฐ์๋ก ์ ์ฅํ๋ฉด ๋๋ค.
์์ ๋ฅผ ํตํด ์ดํดํด๋ณด์.
arr = {3, 5, 2, 7};
์คํ์ ์ฒซ ์ธ๋ฑ์ค 0์ ๋ด๊ณ ์์ํ๋ค.
์คํ์ ๋จธ๋ฆฌ๋ 3์ด๋ค.
๋ฐฐ์ด์ 5๋ถํฐ ์ํํ๋๋ฐ, 5๊ฐ 3๋ณด๋ค ํฌ๊ณ , ๊ฐ์ฅ ์ธ๋ฑ์ค๊ฐ ์์ ๊ฐ์ด๊ธฐ์ 3์ ์คํฐ์๋ 5๋ค.
๊ทธ ๋ค์ 5๋ฅผ ์คํ์ ์ถ๊ฐํ๋ค
์คํ์ ๋จธ๋ฆฌ๋ 5๋ค.
๋ฐฐ์ด์ 2๋ถํฐ ์ํํ๋ค.
2-1. 2๋ 5๋ณด๋ค ์์์ ์คํฐ์๊ฐ ๋์ง๋ ๋ชปํ๋ค.
์คํ์ ์ถ๊ฐํ๋ค.
2-2. ๊ทธ ๋ค์ 7์ 5๋ณด๋ค ์ปค์ ์คํฐ์๋ค.
์ด ๋ง์ ๊ณง ์ฆ์จ, 7์ด 2์ ์คํฐ์๋ผ๋ ๋ป์ด๋ค.
๊ทธ๋์ ์คํ์ด ๋น ๋๊น์ง popํ๋ฉด์ ์คํฐ์์ ์ ์ฅํ๋ค.
์ค๋ฒ#4
listIterator
์์ ์๊ฐ์ ๋ฐ์)์ฌ๋์ ๋ฒํธ๋ฅผ ์ ์ฅํ data
ํ๋, ๋ด ์ผ์ชฝ์ ์์์๋ ์ฌ๋(Node
)์ ๋ํ ํฌ์ธํฐ์ธ prev
ํ๋, ๊ทธ๋ฆฌ๊ณ ๋ด ์ค๋ฅธ์ชฝ ์ฌ๋์ ๋ํ ํฌ์ธํฐ์ธ next
ํ๋๊ฐ ์กด์ฌํ๋ค.
๋ฉ์๋๋ ์์ฑ์๋ง ํ์ํ๋ค.
๋งํฌ๋๋ฆฌ์คํธ์ ์ฒซ ๋
ธ๋๋ฅผ ์ ์ฅํ Node head
, ๋ง์ง๋ง ๋
ธ๋๋ฅผ ์ ์ฅํ Node tail
, ๋งํฌ๋๋ฆฌ์คํธ์ ํฌ๊ธฐ๋ฅผ ์ ์ฅํ int size
, ๊ทธ๋ฆฌ๊ณ ์ด๋ ๋
ธ๋๋ฅผ ์ ๊ฑฐํ ์ง ํธ๋ํนํ Node cursor
ํ๋๋ฅผ ๊ฐ๋๋ค.
๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ด ํ์ํ๋ค
boolean isEmpty()
: ๋งํฌ๋๋ฆฌ์คํธ์ ํฌ๊ธฐ๊ฐ 0์ธ์ง ๋ถ๋ฆฌ์ธ ๊ฐ์ผ๋ก ๋ฐํํ๋คvoid add(Node newNode)
: ์ฒซ ๋
ธ๋ ์ถ๊ฐ, ๋๋ฒ์งธ ๋
ธ๋ ์ถ๊ฐ, ์ด์ธ ๋
ธ๋ ์ถ๊ฐ๋ฅผ ๊ตฌ๋ถํ์ฌ ๊ตฌํํ๋ค. ์ฌ์ด์ฆ ํฌ๊ธฐ๋ฅผ 1 ์ฆ๊ฐ์ํจ๋คint next()
: cursor๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์นธ ์์ง์ธ๋ค. listIterator
์ ๋ฉ์๋๋ฅผ ๋ชจ๋ฐฉํ๋คint remove()
: ํ์ฌ ์ปค์์ ํด๋นํ๋ ๋
ธ๋๋ฅผ ์ ๊ฑฐํ๋ค. ์ปค์ ๋
ธ๋๊ฐ ๋จธ๋ฆฌ ๋๋ ๊ผฌ๋ฆฌ์๋ค๋ฉด reassign ์์
๋ ์งํํ๋ค์
๋ ฅ๋ N์ ๋ํ์ฌ 1~N๊น์ง ์ํ ๋งํฌ๋๋ฆฌ์คํธ์ ์ถ๊ฐํ๋ค. ์ํ ๋งํฌ๋๋ฆฌ์คํธ๊ฐ ๋ชจ๋ ์๋ชจ๋ ๋๊น์ง K๋ฒ์งธ ๋
ธ๋๋ฅผ ์ฐพ์ (next()
) ์ ๊ฑฐ(remove()
)ํ๊ณ , ์ด ์ ๊ฑฐ๋ ๋ฐ์ดํฐ ๊ฐ์ ์์ด์ ์ ์ฅํ๋ค.
๋ง์ง๋ง์ผ๋ก ์์ด์ ์ถ๋ ฅํ๋ค.
์์ธํธ์ค ๋ฌธ์ #1158 ํ์ด์ฝ๋
์ค๋ฒ#3
next()
๋ฉ์๋ ๋์ ์ move()
๋ฉ์๋๋ฅผ ๊ตฌํํ์ฌ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์ด๋์ ๋ชจ๋ ๊ตฌํํ๋ค. <์์ธํธ์ค ๋ฌธ์ >์ Node
์ CircularLinkedList
ํด๋์ค๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค.
์ด๋ ํ์๋ฅผ ์ธ์๊ฐ์ผ๋ก ๋ฐ์์ ์ปค์๋ฅผ ์ด๋์ํจ๋ค. ์ธ์๊ฐ์ด ์์๋ฉด ํ์ฌ ์ปค์์ .prev
๋
ธ๋๋ก ์ด๋ํ๊ณ , ์์๋ฉด ํ์ฌ ์ปค์์ .next
๋
ธ๋๋ก ์ด๋ํ๋ค.