- Python
- ์์ฝ๋
- ์๊ณ ๋ฆฌ์ฆ
- ์นด์นด์ค2021
- DFS
- js
- golang
- ๋นํธ๋งต
- C++
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- LCs
- ํธ๋ฆฌ
- DP
- ์ฌ๊ท
- ๋ฐฑ์ค
- ์นด์นด์ค ์ฝํ
- ํ๋ฆฌ์จ๋ณด๋ฉ
- ์ํฐ๋
- ๋นํธ๋ง์คํน
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- ์ด๋ถํ์
- nestjs
- BFS
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- ์น๋ฆฐ์ด
- go
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- ๋ค์ต์คํธ๋ผ
- Union-Find
- ํ๋ก๊ทธ๋๋จธ์ค
- Today
- Total
Hello Ocean! ๐ผ
[ํ๋ก๊ทธ๋๋จธ์ค/C++] ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ฒ์ ๋ณธ๋ฌธ
๋ฌธ์ ์ค๋ช
๊ฒ์๊ฐ๋ฐ์์ธ ์ฃ ๋ฅด๋๋ ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ธฐ๊ณ๋ฅผ ๋ชจ๋ฐ์ผ ๊ฒ์์ผ๋ก ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค.
์ฃ ๋ฅด๋๋ ๊ฒ์์ ์ฌ๋ฏธ๋ฅผ ๋์ด๊ธฐ ์ํด ํ๋ฉด ๊ตฌ์ฑ๊ณผ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ด ๊ฒ์ ๋ก์ง์ ๋ฐ์ํ๋ ค๊ณ ํฉ๋๋ค.
๊ฒ์ ํ๋ฉด์ 1 x 1 ํฌ๊ธฐ์ ์นธ๋ค๋ก ์ด๋ฃจ์ด์ง N x N ํฌ๊ธฐ์ ์ ์ฌ๊ฐ ๊ฒฉ์์ด๋ฉฐ ์์ชฝ์๋ ํฌ๋ ์ธ์ด ์๊ณ ์ค๋ฅธ์ชฝ์๋ ๋ฐ๊ตฌ๋๊ฐ ์์ต๋๋ค. (์ ๊ทธ๋ฆผ์ 5 x 5 ํฌ๊ธฐ์ ์์์ ๋๋ค). ๊ฐ ๊ฒฉ์ ์นธ์๋ ๋ค์ํ ์ธํ์ด ๋ค์ด ์์ผ๋ฉฐ ์ธํ์ด ์๋ ์นธ์ ๋น์นธ์ ๋๋ค. ๋ชจ๋ ์ธํ์ 1 x 1 ํฌ๊ธฐ์ ๊ฒฉ์ ํ ์นธ์ ์ฐจ์งํ๋ฉฐ ๊ฒฉ์์ ๊ฐ์ฅ ์๋ ์นธ๋ถํฐ ์ฐจ๊ณก์ฐจ๊ณก ์์ฌ ์์ต๋๋ค. ๊ฒ์ ์ฌ์ฉ์๋ ํฌ๋ ์ธ์ ์ข์ฐ๋ก ์์ง์ฌ์ ๋ฉ์ถ ์์น์์ ๊ฐ์ฅ ์์ ์๋ ์ธํ์ ์ง์ด ์ฌ๋ฆด ์ ์์ต๋๋ค. ์ง์ด ์ฌ๋ฆฐ ์ธํ์ ๋ฐ๊ตฌ๋์ ์์ด๊ฒ ๋๋ ๋ฐ, ์ด๋ ๋ฐ๊ตฌ๋์ ๊ฐ์ฅ ์๋ ์นธ๋ถํฐ ์ธํ์ด ์์๋๋ก ์์ด๊ฒ ๋ฉ๋๋ค. ๋ค์ ๊ทธ๋ฆผ์ [1๋ฒ, 5๋ฒ, 3๋ฒ] ์์น์์ ์์๋๋ก ์ธํ์ ์ง์ด ์ฌ๋ ค ๋ฐ๊ตฌ๋์ ๋ด์ ๋ชจ์ต์ ๋๋ค.
๋ง์ฝ ๊ฐ์ ๋ชจ์์ ์ธํ ๋ ๊ฐ๊ฐ ๋ฐ๊ตฌ๋์ ์ฐ์ํด์ ์์ด๊ฒ ๋๋ฉด ๋ ์ธํ์ ํฐ๋จ๋ ค์ง๋ฉด์ ๋ฐ๊ตฌ๋์์ ์ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค. ์ ์ํ์์ ์ด์ด์ [5๋ฒ] ์์น์์ ์ธํ์ ์ง์ด ๋ฐ๊ตฌ๋์ ์์ผ๋ฉด ๊ฐ์ ๋ชจ์ ์ธํ ๋ ๊ฐ๊ฐ ์์ด์ง๋๋ค.
ํฌ๋ ์ธ ์๋ ์ ์ธํ์ด ์ง์ด์ง์ง ์๋ ๊ฒฝ์ฐ๋ ์์ผ๋ ๋ง์ฝ ์ธํ์ด ์๋ ๊ณณ์์ ํฌ๋ ์ธ์ ์๋์ํค๋ ๊ฒฝ์ฐ์๋ ์๋ฌด๋ฐ ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค. ๋ํ ๋ฐ๊ตฌ๋๋ ๋ชจ๋ ์ธํ์ด ๋ค์ด๊ฐ ์ ์์ ๋งํผ ์ถฉ๋ถํ ํฌ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. (๊ทธ๋ฆผ์์๋ ํ๋ฉดํ์ ์ ์ฝ์ผ๋ก 5์นธ๋ง์ผ๋ก ํํํ์์)
๊ฒ์ ํ๋ฉด์ ๊ฒฉ์์ ์ํ๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด board์ ์ธํ์ ์ง๊ธฐ ์ํด ํฌ๋ ์ธ์ ์๋์ํจ ์์น๊ฐ ๋ด๊ธด ๋ฐฐ์ด moves๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ํฌ๋ ์ธ์ ๋ชจ๋ ์๋์ํจ ํ ํฐํธ๋ ค์ ธ ์ฌ๋ผ์ง ์ธํ์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
[์ ํ์ฌํญ]
- board ๋ฐฐ์ด์ 2์ฐจ์ ๋ฐฐ์ด๋ก ํฌ๊ธฐ๋ 5 x 5 ์ด์ 30 x 30 ์ดํ์ ๋๋ค.
- board์ ๊ฐ ์นธ์๋ 0 ์ด์ 100 ์ดํ์ธ ์ ์๊ฐ ๋ด๊ฒจ์์ต๋๋ค.
- 0์ ๋น ์นธ์ ๋ํ๋ ๋๋ค.
- 1 ~ 100์ ๊ฐ ์ซ์๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ์ธํ์ ๋ชจ์์ ์๋ฏธํ๋ฉฐ ๊ฐ์ ์ซ์๋ ๊ฐ์ ๋ชจ์์ ์ธํ์ ๋ํ๋ ๋๋ค.
- moves ๋ฐฐ์ด์ ํฌ๊ธฐ๋ 1 ์ด์ 1,000 ์ดํ์ ๋๋ค.
- moves ๋ฐฐ์ด ๊ฐ ์์๋ค์ ๊ฐ์ 1 ์ด์์ด๋ฉฐ board ๋ฐฐ์ด์ ๊ฐ๋ก ํฌ๊ธฐ ์ดํ์ธ ์์ฐ์์ ๋๋ค.
์ ์ถ๋ ฅ ์
board | moves | result |
[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] | [1,5,3,5,1,2,1,4] | 4 |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ธํ์ ์ฒ์ ์ํ๋ ๋ฌธ์ ์ ์ฃผ์ด์ง ์์์ ๊ฐ์ต๋๋ค. ํฌ๋ ์ธ์ด [1, 5, 3, 5, 1, 2, 1, 4] ๋ฒ ์์น์์ ์ฐจ๋ก๋๋ก ์ธํ์ ์ง์ด์ ๋ฐ๊ตฌ๋์ ์ฎ๊ฒจ ๋ด์ ํ, ์ํ๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ผ๋ฉฐ ๋ฐ๊ตฌ๋์ ๋ด๋ ๊ณผ์ ์์ ํฐํธ๋ ค์ ธ ์ฌ๋ผ์ง ์ธํ์ 4๊ฐ ์ ๋๋ค.
ํ์ด
1. ์ ๋ ฅ๋๋ board ๋ฐฐ์ด ํํ ์ ์ํ๊ธฐ
- ์ฒ์์ board๋ฐฐ์ด์ ์ด๋ค์ด ํ๋์ vector๋ก ์ด๋ฃจ์ด์ ธ ์๋ค๊ณ ์๊ฐํด์, board[i] = ํ๋์ column์ด๋ผ๊ณ ๋ณด๊ณ , ๊ฐ column vector๋ค์ ํ๋์ stack์ฒ๋ผ ์ด์ฉํด์ ์๋์ ๊ฐ์ด ์ฝ๋ฉํ๋ค.
- ํ์ง๋ง ์ด๋ ์์ ํ ์๋ชป๋ ์ ๊ทผ์ด์๋ค. ์ ๋ ฅ๋๋ board ๋ฐฐ์ด์ 2์ฐจ์ ํํ๋ฅผ ์ ์ฌํ ์ดํด๋ณด๋, board[i]๋ ๋น์ฐํ๊ฒ๋ ํ๋์ 'ํ'์ ๊ฐ๋ฆฌํค๋ ์ ๊ทผ์ด์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ ์น๋ฅผ ์ด์ฉํด์ ๊ธฐ์กด์ board[i]๋ฅผ ํ๋์ stack์ฒ๋ผ ์ด์ฉํด๋ณด๋ ค๊ณ ํ์ผ๋, ์ํ๋๋๋ก ์ ๋์ง ์์ stack์ board์์ ๊ฐ์ ธ์จ ์ธํ์ ๋ด๋๋ฐ์๋ง ์ฌ์ฉํ๊ณ , board์์ ์ธํ์ ์ ํํ๋ ๋ถ๋ถ์ ์ผ๋ฐ์ ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ ์ ๊ทผ๋ฐฉ์์ ์ด์ฉํ๋ค.
int solution(vector<vector<int>> board, vector<int> moves) {
int answer = 0;
int index,temp;
vector<int> basket;
for (int i = 0;i < moves.size();i++) {
index = moves[i]-1;
temp = 0;
vector<int> column = board[index];
cout << 1 << endl;
while (board[index].size() > 0) {
temp = board[index].back(); //๋ฌธ์ ๋ถ๋ถ
board[index].pop_back();
if (temp != 0)
break;
}
if (temp != 0) {
if (basket.size() <= 0) {
basket.push_back(temp);
}
else {
if (basket.back() == temp) {
basket.pop_back();
answer++;
}
else {
basket.push_back(temp);
}
}
}
}
return answer;
}
2. ํด๋น ์ด์ ์ ํํ ์ธํ์ด ์๋ ๊ฒฝ์ฐ ์๋ฌด์ผ๋ ์ผ์ด๋์ง ์๋๋ค
- board์์ ์ธํ์ ์ ํํ ๋, ์ ํํ ํ์ ํด๋น ์นธ์ ๊ฐ์ ๊ทธ๋๋ก ๋๊ณ , ํด๋น ์ด์ ๊ผญ๋๊ธฐ๋ฅผ ๋ํ๋ด๋ top[c]๊ฐ์ ๋ฐ๊พธ์ด ์ด์ฉํ๋ค.
- ์ด ๊ณผ์ ์์ ํด๋น ์ด์ ๋ง์ง๋ง ์ธํ์ ์ ํํ ๋, ์ดํ์ ์ธ๋ฑ์ค ์ ๊ทผ ์ค๋ฅ๋ฅผ ๋ง๊ธฐ ์ํด if๋ฌธ์ ์ด์ฉํด์ top์ด n๋ณด๋ค ์ปค์ง์ง ์๋๋ก (๋ฒ์๋ฅผ ๋์ด๊ฐ์ง ์๋๋ก) ์กฐ์ ํ๋๋ฐ, ์ด๊ฒ์ผ๋ก ์ธํด ํด๋น ์ด์ ๋ง์ง๋ง ์ธํ์ด ๊ณ์ํด์ ์ ํ๋๋ ์ค๋ฅ๊ฐ ์๊ฒผ๋ค.
- ๋ฐ๋ผ์ board์์ ์ธํ์ ์ ํํ ๋, ์ ํํ ํ์ ํด๋น ์นธ์ ๊ฐ์ 0์ผ๋ก ๋ฐ๊พธ๋ ๋ถ๋ถ์ ์ถ๊ฐํ๋ค.
์ต์ข ์ฝ๋
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(vector<vector<int>> board, vector<int> moves) {
int answer = 0;
int index,temp;
vector<int> basket;
vector<int> top(board.size(), 0);
for (int j = 0;j < board.size();j++) {
for (int i = board.size()-1;i >=0;i--) {
if (board[i][j] != 0)
top[j] = i;
}
}
for (int i = 0;i < moves.size();i++) {
index = moves[i] -1;
temp = 0;
vector<int> column = board[index];
temp = board[top[index]][index];
board[top[index]][index] = 0;
if (top[index] < board.size()-1)
top[index]++;
if (temp != 0) {
if (basket.size() <= 0) {
basket.push_back(temp);
}
else {
if (basket.back() == temp) {
basket.pop_back();
answer++;
}
else {
basket.push_back(temp);
}
}
}
}
return answer*2;
}
์ถ๊ฐ
- vector.pop_back()์ return๊ฐ์ ์๋ค! (void)์ด๋ค. pop๋๋ ๊ฐ์ ์ป๊ณ ์ถ์ ๊ฒฝ์ฐ, vector.back()์ผ๋ก ๋ง์ง๋ง ๊ฐ์ ๋ฐ์์จ ํ, pop_back()ํด์ฃผ๋ฉด ๋๋ค.
- ์ ์ถ๋ ฅ ํํ๋ฅผ ๋ถ์ํ ํ์ ๋ฌธ์ ๋ฅผ ํ์.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ๋ธ๋ก ์ด๋ํ๊ธฐ (0) | 2021.01.18 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค/C++] ํ๋ณดํค (0) | 2021.01.03 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ฑ๊ตฃ๊ธธ (0) | 2020.12.28 |
[ํ๋ก๊ทธ๋๋จธ์ค/์นด์นด์ค ์ฝํ ] ์คํ์ฑํ ๋ฐฉ (0) | 2020.11.22 |
[ํ๋ก๊ทธ๋๋จธ์ค] 2020 ์นด์นด์ค/๊ดํธ ๋ณํ (0) | 2020.10.12 |