๋ฌธ์ :
programmers.co.kr/learn/courses/30/lessons/49994
๋ถ์ :
์ฒ์์ dfs๋ฌธ์ ์ธ์ค ์๊ณ ๋ง์นจ ์ค๋ dfs ์คํฐ๋ ํด์ dfs ์ง๋ค๊ฐ stack์ push ํด์ค ํ์๊ฐ ์์์ ๋๋ผ๊ณ
๋จ์ ๋ฌธ์์ด ๊ธธ์ด๋งํผ for๋ฌธ์ ๋์ answer ๊ฐ์ ์ฆ๊ฐ ํด์ฃผ๋ ์์ผ๋ก ๊ฐ์ํ ํ์๋ค.
1. ์ฒซ ์ ๊ทผ ๋ฐฉ์
๊ฐ๋ ๊ฐ์ ์ ๋ ๊ฐ ์ ์์ผ๋ 2์ฐจ์ visit ๋ฐฐ์ด ์์ฑ ํ false์ธ ์ขํ์ ๋ํด์๋ง answer ๊ฐ ์ฆ๊ฐ์ํค๊ธฐ
ํ์ง๋ง ์ด ๋ฐฉ์์ 1๋ฒ์, ๋์ฐฉ ๋ ธ๋๋ก ๋ฐฉ๋ฌธํ๋ (5,6)๋ฒ์ง๋ฅผ 7๋ฒ ์์ ์ํ์ (5,6)๋ฒ์ด ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๋ ธ๋๊ฐ ๋์์ผ๋ฏ๋ก 7๋ฒ ๊ฐ์ ์ ๋ง๋ค์ ์๊ฒ ๋๋ค. ๊ทธ๋์ ์ ์ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๋ฉด ์๋๋ค๋ ๊ฒ์ ๊นจ๋ซ๊ณ ๊น์ ๊ณ ๋์ ๋น ์ก๋ค ...
2. ๋๋ฒ์งธ ์ ๊ทผ ๋ฐฉ์
์ ๊ทธ๋ฌ๋ฉด ์ด์ ๋ฐฉ๋ฌธ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ ๋ค์ ๋ ธ๋๋ ์ด๋ฏธ ๋ฐฉ๋ฌธ๋ ์ํ์์๋ 7๋ฒ ๋ ธ๋๋ฅผ ์ํด ๋ค์ ๊ฐ ์ ์๊ฒ ์ถ๊ฐํด์ฃผ์ !
ํ์ง๋ง ์ด ์ญ์
๊ฐ๋ 9๋ฒ, 8๋ฒ ๊ฐ์ ์ ํฌํจํ์ง ์์์ผ ํ๋๋ฐ ์ ์ถ๊ฐํ ์กฐ๊ฑด์ ์ํด ํฌํจ๋๊ฒ ๋๋ค ๐ฉ์ผ .. ๊ทธ๋ฌ๋ฉด ์ด์ฉ๋ผ๊ตฌ ...
3๋ฒ์งธ ์ ๊ทผ ๋ฐฉ์
์ ์ ๊ธฐ๋ฐ์ด ์๋๋ผ ๊ฐ์ ๋ฐฉ์์ด ํ์ํ ๊ฑฐ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
์ด ์ ๋ ธ๋๋ฅผ ์ ์ฅํ๋ ์ ๊ทธ๋ฆผ์ฒ๋ผ ์ ์๋ ๊ฐ๊ณ ์ด๋ฒ์๋ ๊ฐ ๋ ธ๋๊ฐ true์ธ ๊ฒฝ์ฐ๋ง ๋ฐฐ์ ํ๊ณ ๋ฃ์ด์ฃผ๋ฉด ๋๊ฒ ๋ค ์ถ์๋ค. ์์ธํ ๋ด์ฉ์ ์ฝ๋๋ก ๐๐ป๐๐ป
์์ ๋ ธ๋์ ๋์ฐฉ ๋ ธ๋๋ฅผ pair ๋ก ๋ฌถ์ด key ๊ฐ์ผ๋ก ๋ง๋ค์๊ณ ์ด๋ฅผ bool ๊ฐ์ ๊ฐ์ง๋ edge map์ ํ๋ ๋ง๋ค์๋ค. ๊ทธ๋ฆฌ๊ณ false์ผ๋์ ๋ํด true๋ก ๊ฐ ํ์๋ฅผ ํด์ฃผ์๋ค.
c++ ์ฝ๋ :
//
// W] 2018_gameLine.cpp
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2021/04/30.
//
#include <stdio.h>
#include <stack>
#include <iostream>
#include <string.h>
#include <map>
using namespace std;
string dirs[3] = {"ULURRDLLU", "LRLRL", "LULLLLLLU" };
void make_line_dfs(){
int cnt = 0;
map<pair<pair<int, int>, pair<int, int>>, bool> edge;
int dx = 5;
int dy = 5;
for(int i = 0; i < dirs[0].length(); i++){
int priorX = dx;
int priorY = dy;
switch (dirs[0][i]) {
case 'U':
if( dy + 1 > 10){
continue;
}
dy += 1;
break;
case 'D':
if(dy - 1 < 0){
continue;
}
dy -= 1;
break;
case 'R':
if(dx + 1 > 10){
continue;
}
dx += 1;
break;
case 'L':
if(dx - 1 < 0){
continue;
}
dx -= 1;
break;
default:
break;
}
//if(dx < 0 || dy < 0 || dx >= 10 || dy >= 10) continue; // ๊ฑธ์ด์ฃผ๋ false๊ฐ ๋ด๋ค ์์ผ๊น ใ
if(edge[make_pair(make_pair(priorX, priorY), make_pair(dx, dy))] == true) continue;
//false ์ด๋ฉด
edge[make_pair(make_pair(priorX, priorY), make_pair(dx, dy))] = true;
edge[make_pair(make_pair(dx, dy), make_pair(priorX, priorY))] = true;
cnt++;
}
cout << "cnt : " << cnt << '\n';
}
int main(){
make_line_dfs();
int answer = 0;
return 0;
}
๊ฒฐ๊ณผ :
๋๊ธ