- μΉλ¦°μ΄
- DFS
- C++
- λΉνΈλ§μ€νΉ
- νλ‘κ·Έλλ¨Έμ€
- go
- λ°±μλ ν리μ¨λ³΄λ©
- LCs
- κ°μ₯κ°κΉμ΄κ³΅ν΅μ‘°μ
- μν°λ
- λΉνΈλ§΅
- μ΄λΆνμ
- μμ½λ
- λ°±μ€
- μ¬κ·
- νΈλ¦¬
- μΉ΄μΉ΄μ€2021
- λ€μ΅μ€νΈλΌ
- λμ νλ‘κ·Έλλ°
- DP
- Union-Find
- ν리μ¨λ³΄λ©
- golang
- μ¬λΌμ΄λ© μλμ°
- μκ³ λ¦¬μ¦
- BFS
- js
- Python
- nestjs
- μΉ΄μΉ΄μ€ μ½ν
- Today
- Total
Hello Ocean! πΌ
[C++/νλ‘κ·Έλλ¨Έμ€] λΈλ‘ μ΄λνκΈ° λ³Έλ¬Έ
λ¬Έμ μ€λͺ
λ‘λ΄κ°λ°μ 무μ§λ ν λ¬ μμΌλ‘ λ€κ°μ¨ μΉ΄μΉ΄μ€λ°° λ‘λ΄κ²½μ§λνμ μΆνν λ‘λ΄μ μ€λΉνκ³ μμ΅λλ€. μ€λΉ μ€μΈ λ‘λ΄μ 2 x 1 ν¬κΈ°μ λ‘λ΄μΌλ‘ 무μ§λ 0κ³Ό 1λ‘ μ΄λ£¨μ΄μ§ N x N ν¬κΈ°μ μ§λμμ 2 x 1 ν¬κΈ°μΈ λ‘λ΄μ μμ§μ¬ (N, N) μμΉκΉμ§ μ΄λ ν μ μλλ‘ νλ‘κ·Έλλ°μ νλ €κ³ ν©λλ€. λ‘λ΄μ΄ μ΄λνλ μ§λλ κ°μ₯ μΌμͺ½, μλ¨μ μ’νλ₯Ό (1, 1)λ‘ νλ©° μ§λ λ΄μ νμλ μ«μ 0μ λΉμΉΈμ 1μ λ²½μ λνλ λλ€. λ‘λ΄μ λ²½μ΄ μλ μΉΈ λλ μ§λ λ°μΌλ‘λ μ΄λν μ μμ΅λλ€. λ‘λ΄μ μ²μμ μλ κ·Έλ¦Όκ³Ό κ°μ΄ μ’ν (1, 1) μμΉμμ κ°λ‘λ°©ν₯μΌλ‘ λμ¬μλ μνλ‘ μμνλ©°, μλ€ κ΅¬λΆμμ΄ μμ§μΌ μ μμ΅λλ€.
λ‘λ΄μ΄ μμ§μΌ λλ νμ¬ λμ¬μλ μνλ₯Ό μ μ§νλ©΄μ μ΄λν©λλ€. μλ₯Ό λ€μ΄, μ κ·Έλ¦Όμμ μ€λ₯Έμͺ½μΌλ‘ ν μΉΈ μ΄λνλ€λ©΄ (1, 2), (1, 3) λ μΉΈμ μ°¨μ§νκ² λλ©°, μλλ‘ μ΄λνλ€λ©΄ (2, 1), (2, 2) λ μΉΈμ μ°¨μ§νκ² λ©λλ€. λ‘λ΄μ΄ μ°¨μ§νλ λ μΉΈ μ€ μ΄λ ν μΉΈμ΄λΌλ (N, N) μμΉμ λμ°©νλ©΄ λ©λλ€.
λ‘λ΄μ λ€μκ³Ό κ°μ΄ 쑰건μ λ°λΌ νμ μ΄ κ°λ₯ν©λλ€.
μ κ·Έλ¦Όκ³Ό κ°μ΄ λ‘λ΄μ 90λμ© νμ ν μ μμ΅λλ€. λ¨, λ‘λ΄μ΄ μ°¨μ§νλ λ μΉΈ μ€, μ΄λ μΉΈμ΄λ μΆμ΄ λ μ μμ§λ§, νμ νλ λ°©ν₯(μΆμ΄ λλ μΉΈμΌλ‘λΆν° λκ°μ λ°©ν₯μ μλ μΉΈ)μλ λ²½μ΄ μμ΄μΌ ν©λλ€. λ‘λ΄μ΄ ν μΉΈ μ΄λνκ±°λ 90λ νμ νλ λ°λ 걸리λ μκ°μ μ νν 1μ΄ μ λλ€.
0κ³Ό 1λ‘ μ΄λ£¨μ΄μ§ μ§λμΈ boardκ° μ£Όμ΄μ§ λ, λ‘λ΄μ΄ (N, N) μμΉκΉμ§ μ΄λνλλ° νμν μ΅μ μκ°μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ νμ¬ν
- boardμ ν λ³μ κΈΈμ΄λ 5 μ΄μ 100 μ΄νμ λλ€.
- boardμ μμλ 0 λλ 1μ λλ€.
- λ‘λ΄μ΄ μ²μμ λμ¬ μλ μΉΈ (1, 1), (1, 2)λ νμ 0μΌλ‘ μ£Όμ΄μ§λλ€.
- λ‘λ΄μ΄ νμ λͺ©μ μ§μ λμ°©ν μ μλ κ²½μ°λ§ μ λ ₯μΌλ‘ μ£Όμ΄μ§λλ€.
μ μΆλ ₯ μ
board | result |
[[0, 0, 0, 1, 1],[0, 0, 0, 1, 0],[0, 1, 0, 1, 1],[1, 1, 0, 0, 1],[0, 0, 0, 0, 0]] | 7 |
λ¬Έμ μ μ£Όμ΄μ§ μμμ κ°μ΅λλ€.
λ‘λ΄μ΄ μ€λ₯Έμͺ½μΌλ‘ ν μΉΈ μ΄λ ν, (1, 3) μΉΈμ μΆμΌλ‘ λ°μκ³ λ°©ν₯μΌλ‘ 90λ νμ ν©λλ€. λ€μ, μλμͺ½μΌλ‘ 3μΉΈ μ΄λνλ©΄ λ‘λ΄μ (4, 3), (5, 3) λ μΉΈμ μ°¨μ§νκ² λ©λλ€. μ΄μ (5, 3)μ μΆμΌλ‘ μκ³ λ°©ν₯μΌλ‘ 90λ νμ ν, μ€λ₯Έμͺ½μΌλ‘ ν μΉΈ μ΄λνλ©΄ (N, N)μ λμ°©ν©λλ€. λ°λΌμ λͺ©μ μ§μ λλ¬νκΈ°κΉμ§ μ΅μ 7μ΄κ° 걸립λλ€.
νμ΄
νλ©΄μ λλ μ£Όμμ¬ν
1. λ‘λ΄μ νμ¬ λμ¬μλ λ°©ν₯μ κ΄κ³μμ΄ μνμ’μ°λ‘ μμ§μΌ μ μλ€.
μ²μμ κ°λ‘λ‘ λμ¬μμΌλ©΄ μ’,μ°, μΈλ‘λ‘ λμ¬μμΌλ©΄ μ,μλ λ‘λ§ μμ§μΌ μ μλμ€ μκ³ μ½λ©μ μ§ννλ€. νμ§λ§ λ‘λ΄μ μΈμ λ μ§ (λ²½λ§ μμΌλ©΄) μνμ’μ°λ‘ λͺ¨λ μμ§μΌ μ μλ€!
2. νμ ν λ μΆμ λ°λ₯Έ κ²½μ°μ μ λλ¨.
μλ₯Όλ€μ΄ λ‘λ΄μ΄ μΈλ‘λ°©ν₯ μΌ λ, μΌ/μ€ λ κ°μ§λ‘ νμ κ°λ₯νλ€κ³ μκ°νκΈ° μ½μ§λ§, μ΄λ μΉΈμ΄ μΆμ΄ λλλμ λ°λΌ κ²½μ°μ μκ° λλλ€λ κ²μ μ μ μλ€.
λ°λΌμ, μ μΉΈμ΄ μΆ - μΌ/μ€, μλ μΉΈμ΄ μΆ - μΌ/μ€ -> 4κ°μ§λ‘ λλλ€.
λ‘λ΄μ΄ κ°λ‘λ°©ν₯μΌ λλ λ§μ°¬κ°μ§λ‘ μ μ©λλ€.
3. μ²μλΆν° λ무 μ΄λ ΅κ² μκ°νμ§ λ§κΈ°
λ‘λ΄μ΄ 2μΉΈμ μ°¨μ§νκ³ , μ¬μ§μ΄ νμ κΉμ§ λ€μ΄κ°λ³΄μ¬μ λ§€μ° μ΄λ ΅κ² 보μλ€. (μ€μ λ‘ μ΄λ ΅κΈ°λ νμ§λ§..) νμ§λ§ bfsλ₯Ό μ‘°κΈ λ³ννλ©΄ ν μ μλ λ¬Έμ μλ€. μ‘°κ±΄μ΄ λ§λ€κ³ μ²μλΆν° κ²λ¨Ήμ νμλ μμ κ² κ°λ€.
λ΄μ©
1. λ‘λ΄ κ΅¬μ‘°μ²΄(struct) μ΄μ©
- time
- λ‘λ΄μ΄ ν΄λΉ μμΉλ‘ μ¬ λ κΉμ§ κ±Έλ¦° μκ°
- x, y
- λ‘λ΄μ μ’ν, λ‘λ΄μ΄ κ°λ‘μ μΈλ‘μΌ λ κ°κ° μλ μ¬μ§μ μΉΈμ x,yλ‘ μ€μ
- type
- κ°λ‘ = 0, μΈλ‘ = 1
2. bfs μ΄μ©
μ’ λ£ μ‘°κ±΄μ λ§μ‘±ν λ κΉμ§ νμμ νλλ₯Ό κΊΌλ΄κ³ , ν΄λΉ μμΉμμ κ°λ₯ν λ€μ μμΉλ€μ λͺ¨λ λ£λ λ°©μμΌλ‘ μ§ν
μ’ λ£ μ‘°κ±΄ : λ‘λ΄μ΄ (n-1,n-1)μ μμΉνμ λ.
μ½λ
μ²μμ bfsλ‘ νμ΄μΌμ§ νλ€κ°, μ½λλ₯Ό λ€ μ§κ³ 보λ dfsλ‘ νκ³ μμλ€λ μ¬μ€μ κΉ¨λ¬μλ€.. μ²μλΆν° λ€μ μμ..
#include <string>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
struct robot {
int time;
int x;
int y;
int type; // 0 : κ°λ‘, 1 : μΈλ‘
};
bool check(int x, int y, int type);
int visit[101][101][2]; // 0 : κ°λ‘, 1 : μΈλ‘
int dx[] = { -1, 1, 0, 0 }; //μ ν μ’ μ°
int dy[] = { 0, 0, -1, 1 };
vector<vector<int> > table;
bool check(int x, int y, int type) { // λ²μλ₯Ό λ²μ΄λκ±°λ, λ²½μ λΆλͺνλ©΄ false
int N = table.size();
if (type == 0) {//κ°λ‘
if (x < 0 || y < 0 || x >= N || y + 1 >= N) return false;
if (table[x][y] || table[x][y + 1]) return false;
}
else {//μΈλ‘
if (x < 0 || y < 0 || x + 1 >= N || y >= N) return false;
if (table[x][y] || table[x + 1][y]) return false;
}
return true;
}
int solution(vector<vector<int>> board) {
int answer = 0, N = board.size();
table = board;
memset(visit, 0, sizeof(visit));
queue<robot> q;
q.push({ 0, 0, 0, 0 });
while (!q.empty()) {
robot now = q.front();
q.pop();
if ((now.type == 0 && now.x == N - 1 && now.y == N - 2) || (now.type == 1 && now.x == N - 2 && now.y == N - 1)) {
return now.time;
}
for (int i = 0; i < 4; i++) { // μνμ’μ° μ΄λ
int nx = now.x + dx[i];
int ny = now.y + dy[i];
if (!check(nx, ny, now.type) || visit[nx][ny][now.type]) continue; //μ΄μ μ λ°©λ¬Έν μ μμΌλ©΄ 건λλ°κΈ°
visit[nx][ny][now.type] = 1;
q.push({ now.time + 1, nx, ny, now.type });
}
//μ¬κΈ°λΆν° νμ
if (now.type == 0) { //κ°λ‘
//μ€λ₯Έμͺ½ μΉΈμ΄ μΆ
if (now.x + 1 <= N - 1 && !table[now.x + 1][now.y] && !table[now.x + 1][now.y + 1] && !visit[now.x][now.y + 1][1]) {
q.push({ now.time + 1, now.x, now.y + 1, 1 });
}
if (now.x - 1 >= 0 && !table[now.x - 1][now.y] && !table[now.x - 1][now.y + 1] && !visit[now.x - 1][now.y + 1][1]) {
q.push({ now.time + 1, now.x - 1, now.y + 1, 1 });
}
//μΌμͺ½ μΉΈμ΄ μΆ
if (now.x + 1 <= N - 1 && !table[now.x + 1][now.y + 1] && !table[now.x + 1][now.y] && !visit[now.x][now.y][1]) {
q.push({ now.time + 1, now.x, now.y, 1 });
}
if (now.x - 1 >= 0 && !table[now.x - 1][now.y + 1] && !table[now.x - 1][now.y] && !visit[now.x - 1][now.y][1]) {
q.push({ now.time + 1, now.x - 1, now.y, 1 });
}
}
else { //μΈλ‘
//μλμΉΈμ΄ μΆ
if (now.y - 1 >= 0 && !table[now.x][now.y - 1] && !table[now.x + 1][now.y - 1] && !visit[now.x + 1][now.y - 1][0]) {
q.push({ now.time + 1, now.x + 1, now.y - 1, 0 });
}
if (now.y + 1 <= N - 1 && !table[now.x][now.y + 1] && !table[now.x + 1][now.y + 1] && !visit[now.x + 1][now.y][0]) {
q.push({ now.time + 1, now.x + 1, now.y, 0 });
}
//μ μΉΈμ΄ μΆ
if (now.y - 1 >= 0 && !table[now.x + 1][now.y - 1] && !table[now.x][now.y - 1] && !visit[now.x][now.y - 1][0]) {
q.push({ now.time + 1, now.x, now.y - 1, 0 });
}
if (now.y + 1 <= N - 1 && !table[now.x + 1][now.y + 1] && !table[now.x][now.y + 1] && !visit[now.x][now.y][0]) {
q.push({ now.time + 1, now.x, now.y, 0 });
}
}
}
}
'Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[C++] structμ classμ μ°¨μ΄ (0) | 2021.01.25 |
---|---|
[νλ‘κ·Έλλ¨Έμ€/C++] κΈΈ μ°ΎκΈ° κ²μ (0) | 2021.01.25 |
[νλ‘κ·Έλλ¨Έμ€/C++] νλ³΄ν€ (0) | 2021.01.03 |
[νλ‘κ·Έλλ¨Έμ€/C++] ν¬λ μΈ μΈνλ½κΈ° κ²μ (0) | 2020.12.29 |
[νλ‘κ·Έλλ¨Έμ€] λ±κ΅£κΈΈ (0) | 2020.12.28 |