[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ๋ฏธ๋กœ ํƒˆ์ถœ ๋ช…๋ น์–ด (C++)

2023. 9. 7. 13:35ยท๐Ÿ–ฅ๏ธ Study Note/Coding Test

๋ฌธ์ œ ์„ค๋ช…

n x m ๊ฒฉ์ž ๋ฏธ๋กœ๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋ฏธ๋กœ์˜ (x, y)์—์„œ ์ถœ๋ฐœํ•ด (r, c)๋กœ ์ด๋™ํ•ด์„œ ํƒˆ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ, ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœํ•˜๋Š” ์กฐ๊ฑด์ด ์„ธ ๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ฒฉ์ž์˜ ๋ฐ”๊นฅ์œผ๋กœ๋Š” ๋‚˜๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  2. (x, y)์—์„œ (r, c)๊นŒ์ง€ ์ด๋™ํ•˜๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ์ด k์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, (x, y)์™€ (r, c)๊ฒฉ์ž๋ฅผ ํฌํ•จํ•ด, ๊ฐ™์€ ๊ฒฉ์ž๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒ ๋ฐฉ๋ฌธํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.
  3. ๋ฏธ๋กœ์—์„œ ํƒˆ์ถœํ•œ ๊ฒฝ๋กœ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋‚˜ํƒ€๋ƒˆ์„ ๋•Œ, ๋ฌธ์ž์—ด์ด ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒฝ๋กœ๋กœ ํƒˆ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋™ ๊ฒฝ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • l: ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™
  • r: ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™
  • u: ์œ„์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™
  • d: ์•„๋ž˜์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™

์˜ˆ๋ฅผ ๋“ค์–ด, ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ, ์œ„๋กœ ํ•œ ์นธ, ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์›€์ง์˜€๋‹ค๋ฉด, ๋ฌธ์ž์—ด "lul"๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฏธ๋กœ์—์„œ๋Š” ์ธ์ ‘ํ•œ ์ƒ, ํ•˜, ์ขŒ, ์šฐ ๊ฒฉ์ž๋กœ ํ•œ ์นธ์”ฉ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด 3 x 4 ๊ฒฉ์ž๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

.... ..S. E...

๋ฏธ๋กœ์˜ ์ขŒ์ธก ์ƒ๋‹จ์€ (1, 1)์ด๊ณ  ์šฐ์ธก ํ•˜๋‹จ์€ (3, 4)์ž…๋‹ˆ๋‹ค. .์€ ๋นˆ ๊ณต๊ฐ„, S๋Š” ์ถœ๋ฐœ ์ง€์ , E๋Š” ํƒˆ์ถœ ์ง€์ ์ž…๋‹ˆ๋‹ค.

ํƒˆ์ถœ๊นŒ์ง€ ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ๊ฑฐ๋ฆฌ k๊ฐ€ 5๋ผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ๋กœ๋กœ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. lldud
  2. ulldd
  3. rdlll
  4. dllrl
  5. dllud
  6. ...

์ด๋•Œ dllrl๋ณด๋‹ค ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๋น ๋ฅธ ๊ฒฝ๋กœ๋กœ ํƒˆ์ถœํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๊ฒฉ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋œปํ•˜๋Š” ์ •์ˆ˜ n, m, ์ถœ๋ฐœ ์œ„์น˜๋ฅผ ๋œปํ•˜๋Š” ์ •์ˆ˜ x, y, ํƒˆ์ถœ ์ง€์ ์„ ๋œปํ•˜๋Š” ์ •์ˆ˜ r, c, ํƒˆ์ถœ๊นŒ์ง€ ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ๋œปํ•˜๋Š” ์ •์ˆ˜ k๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ, ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœํ•˜๊ธฐ ์œ„ํ•œ ๊ฒฝ๋กœ๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ๋‹จ, ์œ„ ์กฐ๊ฑด๋Œ€๋กœ ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ "impossible"์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํ’€์ด

์žฌ๊ท€ DFS๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ์žฌ๊ท€๊ฐ€ ์•ฝํ•ด์„œ ์‹œ๊ฐ„์ด ์ข€ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค…ใ…Ž

๐Ÿ’ก์ด ๋ฌธ์ œ์˜ ํฌ์ธํŠธ

  1. ๋‚จ์€ ์ด๋™ ํšŸ์ˆ˜์—์„œ ๋ชฉํ‘œ๊นŒ์ง€ ๊ฑฐ๋ฆฌ์—์„œ ๋บ€ ์ˆ˜๊ฐ€ 0๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ํ™€์ˆ˜๋ฉด ์‹คํŒจ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • (๋‚จ์€ ์ด๋™ ํšŸ์ˆ˜ - ๋ชฉํ‘œ๊นŒ์ง€ ๊ฑฐ๋ฆฌ) : ๋ชฉํ‘œ ์ง€์ ์— ๋„์ฐฉ ํ›„ ๋‚จ์€ ์ด๋™ ํšŸ์ˆ˜
      • ๋ชฉํ‘œ ์ง€์ ์— ๋„์ฐฉ ํ›„ ๋‚จ์€ ์ด๋™ ํšŸ์ˆ˜ < 0 : ๋ชฉํ‘œ ์ง€์ ์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•จ
      • ๋ชฉํ‘œ ์ง€์ ์— ๋„์ฐฉ ํ›„ ๋‚จ์€ ์ด๋™ ํšŸ์ˆ˜ == ํ™€์ˆ˜ : ๋‚จ์€ ์ด๋™ ํšŸ์ˆ˜ ์†Œ๋ชจ๋ฅผ ์œ„ํ•ด ๋‹ค๋ฅธ ์นธ์œผ๋กœ ๊ฐ”๋‹ค๊ฐ€ ๋‹ค์‹œ ๋Œ์•„์™€์•ผ ํ•˜๋Š”๋ฐ, ํ™€์ˆ˜๋ฉด ๋‹ค์‹œ ๋Œ์•„์˜ฌ ์ˆ˜ ์—†๋‹ค.
  2. ๋‹ค์Œ ์ด๋™ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ ์‚ฌ์ „์ˆœ์œผ๋กœ ๋น ๋ฅธ ๋ฐฉํ–ฅ๋ถ€ํ„ฐ ์ด๋™ํ•œ๋‹ค.
    • d → l → r → u ์ˆœ์œผ๋กœ ์ด๋™ํ•ด์•ผ ์‚ฌ์ „์ˆœ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.
#include <string>
#include <vector>
#include <cmath>
#include <iostream>

using namespace std;

string answer = "impossible";
bool isArrived = false;
int limit = 0;
pair<int, int> maze_size;
pair<int, int> start;
pair<int, int> goal;

int dx[] = {1, 0, 0, -1};
int dy[] = {0, -1, 1, 0};
char d[]  = {'d', 'l', 'r', 'u'}; // ์‚ฌ์ „์ˆœ์œผ๋กœ ๋น ๋ฅด๊ฒŒ

int GetDist(pair<int, int> cur)
{
    return abs(goal.first - cur.first) + abs(goal.second - cur.second);
}

void dfs(int count, pair<int, int> cur, string path)
{
    if(isArrived)
        return;
    
    // ๋‚จ์€ ๊ฑฐ๋ฆฌ๊ฐ€ 0๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ํ™€์ˆ˜๋ฉด ์‹คํŒจ
    if((limit-count-GetDist(cur)) < 0 
       || (limit-count-GetDist(cur))%2 == 1)
        return;
    
    // ๋„์ฐฉ ์ง€์ ์— ๋„์ฐฉํ–ˆ๋‹ค๋ฉด ์„ฑ๊ณต
    if(count == limit)
    {
        if(cur == goal)
        {
            isArrived = true;
            answer = path;
        }
        
        return;
    }
    
    // ์ด๋™
    for(int i = 0; i < 4; ++i)
    {
        int nx = cur.first + dx[i];
        int ny = cur.second + dy[i];
        
        if(nx <= 0 || nx > maze_size.first 
           || ny <= 0 || ny > maze_size.second)
            continue;
        
        path += d[i];
        dfs(count+1, make_pair(nx, ny), path);
        path.pop_back();
    }
}

string solution(int n, int m, int x, int y, int r, int c, int k) 
{
    maze_size = make_pair(n, m);
    start = make_pair(x,y);
    goal = make_pair(r,c);
    limit = k;
    
    dfs(0, start, "");
    
    return answer;
}
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ–ฅ๏ธ Study Note > Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ๋“ฑ์‚ฐ์ฝ”์Šค ์ •ํ•˜๊ธฐ (C++)  (1) 2023.09.18
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ์–‘๊ณผ ๋Š‘๋Œ€ (C++)  (0) 2023.09.14
[BOJ 11657] ๋ฐฑ์ค€ ํƒ€์ž„๋จธ์‹  - C++ ํ’€์ด  (0) 2023.09.06
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ์ˆœ์œ„ (C++)  (0) 2023.09.05
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ (C++)  (0) 2023.09.05
'๐Ÿ–ฅ๏ธ Study Note/Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ๋“ฑ์‚ฐ์ฝ”์Šค ์ •ํ•˜๊ธฐ (C++)
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ์–‘๊ณผ ๋Š‘๋Œ€ (C++)
  • [BOJ 11657] ๋ฐฑ์ค€ ํƒ€์ž„๋จธ์‹  - C++ ํ’€์ด
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ์ˆœ์œ„ (C++)
Beankong_
Beankong_
์ฃผ๋‹ˆ์–ด ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๊ณต๋ถ€ ๊ธฐ๋ก
  • Beankong_
    Beankong's Devlog
    Beankong_
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด ๊ธ€ (146)
      • โ›… Daily (0)
      • ๐Ÿ–ฅ๏ธ Study Note (2)
        • C++ (1)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • ๐Ÿงญ Devlog (8)
        • ์˜ค๋‹ต๋…ธํŠธ (4)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋งํฌ

    • ๊ณต์ง€์‚ฌํ•ญ

    • ์ธ๊ธฐ ๊ธ€

    • ํƒœ๊ทธ

      propertyaccess
      unrealengine build system
      ๊ทธ๋ฆฌ๋””(greedy)
      unrealengine module
      ๊ฒŒ์ž„ ๊ฐœ๋ฐœ
      ์•Œ๊ณ ๋ฆฌ์ฆ˜
      ๊ฒŒ์ž„ ๋ชจ์ž‘
      ํ—ฌํ…Œ์ด์ปค
      ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
      UnrealEngine
      ๊ฒŒ์ž„ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
      programmers
      ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ
      ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
      cpp
      UnrealEngine5
      OnlineSubsystem
      ๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      ํ”„๋ฃŒ๊ทธ๋ž˜๋จธ์Šค
    • ์ตœ๊ทผ ๋Œ“๊ธ€

    • ์ตœ๊ทผ ๊ธ€

    • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
    Beankong_
    [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ๋ฏธ๋กœ ํƒˆ์ถœ ๋ช…๋ น์–ด (C++)
    ์ƒ๋‹จ์œผ๋กœ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”