ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ(C++)

2023. 4. 11. 12:11ยท๐Ÿ–ฅ๏ธ Study Note/Coding Test

https://school.programmers.co.kr/learn/courses/30/lessons/1844

๋ฌธ์ œ ์„ค๋ช…

ROR ๊ฒŒ์ž„์€ ๋‘ ํŒ€์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ง„ํ–‰ํ•˜๋ฉฐ, ์ƒ๋Œ€ ํŒ€ ์ง„์˜์„ ๋จผ์ € ํŒŒ๊ดดํ•˜๋ฉด ์ด๊ธฐ๋Š” ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ ํŒ€์€ ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ๋„์ฐฉํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ๋ถ€ํ„ฐ ๋‹น์‹ ์€ ํ•œ ํŒ€์˜ ํŒ€์›์ด ๋˜์–ด ๊ฒŒ์ž„์„ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ 5 x 5 ํฌ๊ธฐ์˜ ๋งต์—, ๋‹น์‹ ์˜ ์บ๋ฆญํ„ฐ๊ฐ€ (ํ–‰: 1, ์—ด: 1) ์œ„์น˜์— ์žˆ๊ณ , ์ƒ๋Œ€ ํŒ€ ์ง„์˜์€ (ํ–‰: 5, ์—ด: 5) ์œ„์น˜์— ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

์œ„ ๊ทธ๋ฆผ์—์„œ ๊ฒ€์€์ƒ‰ ๋ถ€๋ถ„์€ ๋ฒฝ์œผ๋กœ ๋ง‰ํ˜€์žˆ์–ด ๊ฐˆ ์ˆ˜ ์—†๋Š” ๊ธธ์ด๋ฉฐ, ํฐ์ƒ‰ ๋ถ€๋ถ„์€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ์ž…๋‹ˆ๋‹ค. ์บ๋ฆญํ„ฐ๊ฐ€ ์›€์ง์ผ ๋•Œ๋Š” ๋™, ์„œ, ๋‚จ, ๋ถ ๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ์นธ์”ฉ ์ด๋™ํ•˜๋ฉฐ, ๊ฒŒ์ž„ ๋งต์„ ๋ฒ—์–ด๋‚œ ๊ธธ์€ ๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.์•„๋ž˜ ์˜ˆ์‹œ๋Š” ์บ๋ฆญํ„ฐ๊ฐ€ ์ƒ๋Œ€ ํŒ€ ์ง„์˜์œผ๋กœ ๊ฐ€๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ๋‚˜ํƒ€๋‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ 11๊ฐœ์˜ ์นธ์„ ์ง€๋‚˜์„œ ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ๋„์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ 15๊ฐœ์˜ ์นธ์„ ์ง€๋‚˜์„œ ์ƒ๋Œ€ํŒ€ ์ง„์˜์— ๋„์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์œ„ ์˜ˆ์‹œ์—์„œ๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•๋ณด๋‹ค ๋” ๋น ๋ฅด๊ฒŒ ์ƒ๋Œ€ํŒ€ ์ง„์˜์— ๋„์ฐฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—†์œผ๋ฏ€๋กœ, ์ด ๋ฐฉ๋ฒ•์ด ์ƒ๋Œ€ ํŒ€ ์ง„์˜์œผ๋กœ ๊ฐ€๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋งŒ์•ฝ, ์ƒ๋Œ€ ํŒ€์ด ์ž์‹ ์˜ ํŒ€ ์ง„์˜ ์ฃผ์œ„์— ๋ฒฝ์„ ์„ธ์›Œ๋‘์—ˆ๋‹ค๋ฉด ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ๋„์ฐฉํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ๋‹น์‹ ์˜ ์บ๋ฆญํ„ฐ๋Š” ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ๋„์ฐฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ฒŒ์ž„ ๋งต์˜ ์ƒํƒœ maps๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์บ๋ฆญํ„ฐ๊ฐ€ ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ๋„์ฐฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ง€๋‚˜๊ฐ€์•ผ ํ•˜๋Š” ์นธ์˜ ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ๋‹จ, ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ๋„์ฐฉํ•  ์ˆ˜ ์—†์„ ๋•Œ๋Š” -1์„ return ํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • maps๋Š” n x m ํฌ๊ธฐ์˜ ๊ฒŒ์ž„ ๋งต์˜ ์ƒํƒœ๊ฐ€ ๋“ค์–ด์žˆ๋Š” 2์ฐจ์› ๋ฐฐ์—ด๋กœ, n๊ณผ m์€ ๊ฐ๊ฐ 1 ์ด์ƒ 100 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
    • n๊ณผ m์€ ์„œ๋กœ ๊ฐ™์„ ์ˆ˜๋„, ๋‹ค๋ฅผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, n๊ณผ m์ด ๋ชจ๋‘ 1์ธ ๊ฒฝ์šฐ๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • maps๋Š” 0๊ณผ 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, 0์€ ๋ฒฝ์ด ์žˆ๋Š” ์ž๋ฆฌ, 1์€ ๋ฒฝ์ด ์—†๋Š” ์ž๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ์ฒ˜์Œ์— ์บ๋ฆญํ„ฐ๋Š” ๊ฒŒ์ž„ ๋งต์˜ ์ขŒ์ธก ์ƒ๋‹จ์ธ (1, 1) ์œ„์น˜์— ์žˆ์œผ๋ฉฐ, ์ƒ๋Œ€๋ฐฉ ์ง„์˜์€ ๊ฒŒ์ž„ ๋งต์˜ ์šฐ์ธก ํ•˜๋‹จ์ธ (n, m) ์œ„์น˜์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

maps  answer
[[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11
[[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์บ๋ฆญํ„ฐ๊ฐ€ ์  ํŒ€์˜ ์ง„์˜๊นŒ์ง€ ์ด๋™ํ•˜๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๊ธธ์€ ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์ด 11์นธ์„ ์บ๋ฆญํ„ฐ๊ฐ€ ์ง€๋‚˜๊ฐ”์œผ๋ฏ€๋กœ 11์„ return ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2๋ฌธ์ œ์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์œผ๋ฉฐ, ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ๋„๋‹ฌํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ -1์„ return ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํ•ด๋‹ต

BFS๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค.

#include<vector>
#include<queue>

using namespace std;

int solution(vector<vector<int> > maps)
{
    int answer = 0;
    
    int N = maps.size();
    int M = maps[0].size();
    
    vector<vector<bool>> visit(N, vector<bool>(M, false));  // ๋ฐฉ๋ฌธํ•œ ์  ์žˆ๋Š” ๊ธธ์ด๋ฉด true
    vector<vector<int>> route(N, vector<int>(M, 0));       // ์ตœ๋‹จ ๊ฒฝ๋กœ ์ €์žฅ
    queue<pair<int, int>> q;
    
    // 4๋ฐฉํ–ฅ ๊ณ„์‚ฐ์šฉ ๋ฐฐ์—ด
    int dx[4] = {1, 0, -1, 0};
    int dy[4] = {0, 1, 0, -1};
    
    // ์‹œ์ž‘์  ๊ฐ’ ๋„ฃ๊ธฐ
    q.push(make_pair(0, 0));
    visit[0][0] = true;
    route[0][0] = 1;
    
    
    while(!q.empty())
    {
        // ํ˜„์žฌ ์œ„์น˜
        int x = q.front().first;
        int y = q.front().second;
        
        q.pop();
        
        for(int i = 0; i < 4; ++i )
        {
            // ๋‹ค์Œ์— ์ด๋™ํ•  ์œ„์น˜
            int nx = x + dx[i];
            int ny = y + dy[i];
            
            // ์ด๋™ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ์„ ๊ฒฝ์šฐ continue
            if(nx < 0 || nx >= N || ny < 0 || ny >= M)
                continue;
            
            // ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ธธ์ด๋ฉด ๋ฐฉ๋ฌธ
            if(maps[nx][ny] && !visit[nx][ny])
            {
                visit[nx][ny] = true;
                q.push(make_pair(nx, ny));
                route[nx][ny] = route[x][y]+1;
            }
        }
    }
    
    if(!route[N-1][M-1])
        return -1;
    else
        answer = route[N-1][M-1];
    
    return answer;
}

route[N-1][M-1]์˜ ๊ฐ’์ด ์ตœ์†Ÿ๊ฐ’์ž„์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š”

๋„์ฐฉ์ง€( (N-1), (M-1) )์— ๊ฐ€์žฅ ๋จผ์ € ๋„์ฐฉํ•œ ๊ฒฝ๋กœ๊ฐ€ visited[N-1][M-1]์— ๋ฐฉ๋ฌธ ์ฒดํฌ๋ฅผ ํ•˜๊ธฐ์—

๋‹ค๋ฅธ ๊ฒฝ๋กœ๊ฐ€ ๋ฎ์–ด์“ธ ์ผ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

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

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ์—ฌํ–‰๊ฒฝ๋กœ(C++)  (0) 2023.04.14
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ๋‹จ์–ด ๋ณ€ํ™˜(C++)  (0) 2023.04.13
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ๋„คํŠธ์›Œํฌ(C++)  (0) 2023.04.10
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ํƒ€๊ฒŸ ๋„˜๋ฒ„(C++)  (0) 2023.04.07
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ์ „๋ ฅ๋ง์„ ๋‘˜๋กœ ๋‚˜๋ˆ„๊ธฐ(C++)  (0) 2023.04.06
'๐Ÿ–ฅ๏ธ Study Note/Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ์—ฌํ–‰๊ฒฝ๋กœ(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ๋‹จ์–ด ๋ณ€ํ™˜(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ๋„คํŠธ์›Œํฌ(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ํƒ€๊ฒŸ ๋„˜๋ฒ„(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)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋งํฌ

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

    • ์ธ๊ธฐ ๊ธ€

    • ํƒœ๊ทธ

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

    • ์ตœ๊ทผ ๊ธ€

    • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
    Beankong_
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ(C++)
    ์ƒ๋‹จ์œผ๋กœ

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