[Programmers] 1844 게임 맵 최단거리 (C++)

2025. 7. 9. 21:20·PS/프로그래머스[programmers]
728x90

문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

풀이

문제를 읽으면 Flood fill을 사용하는 문제임을 알 수 있다. 잠시 Flood fill을 알아보면,

Flood fill이란? 

2차원 배열(혹은 다차원 배열)에서 주어진 시작점과 연결된 영역 전체를 찾아서 특정 값(색상 등)으로 바꾸는 알고리즘

 

Flood fill을 이용한 BFS의 기본적인 예제 문제이다. (0, 0)에서 (n-1, m-1)까지의 최단 경로를 찾아야 한다. 프로그래머스 특성상 다음의 처리만 잘 해주면 된다.

  1. 방문할 수 없는 경우 -1 예외 처리
  2. 프로그래머스 환경이므로 solution함수 안에서 N, M 초기화하기

 

코드

#include<iostream>
#include<queue>
#include<vector>
#define IN(Y, X) (Y < N && Y >= 0 && X < M && X >= 0)
#define FAST_IO cin.tie(0), cout.tie(0), ios_base::sync_with_stdio(0)
#define F first
#define S second
using namespace std;
typedef pair<int, int> PII;

int dy[4] = { 1, 0, -1, 0 };
int dx[4] = { 0, 1, 0, -1 };

bool visit[100][100];
queue<PII> que;



int solution(vector<vector<int>> maps) {
	int answer = -1;
    
    int N = maps.size();
    int M = maps[0].size();

	que.push({ 0, 0 });
	visit[0][0] = true;

	while (!que.empty()) {
		PII cur = que.front();
		que.pop();
		int cy = cur.F;
		int cx = cur.S;

		if (cy == N - 1 && cx == M - 1) return maps[cy][cx];

		for (int i = 0; i < 4; i++) {
			int ny = cy + dy[i];
			int nx = cx + dx[i];
			if (IN(ny, nx) && maps[ny][nx] == 1 && !visit[ny][nx]) {
				maps[ny][nx] = maps[cy][cx] + 1; // cnt 
				visit[ny][nx] = true;
				que.push({ ny, nx });
			}
		}
	}
	return answer;
}

 

728x90
저작자표시 비영리 변경금지 (새창열림)

'PS > 프로그래머스[programmers]' 카테고리의 다른 글

[Programmers] 17679 프렌즈4블록 (C++)  (2) 2025.07.10
[Programmers] 주식 가격  (2) 2024.12.19
'PS/프로그래머스[programmers]' 카테고리의 다른 글
  • [Programmers] 17679 프렌즈4블록 (C++)
  • [Programmers] 주식 가격
BE_개발자
BE_개발자
경이로운 BE 개발자가 되기 위한 프로그래밍 공부 기록장
    250x250
  • BE_개발자
    경이로운 개발일기
    BE_개발자
  • 전체
    오늘
    어제
    • 전체 보기 (213)
      • AI (1)
        • AI native (0)
        • Skill (0)
      • SpringBoot (4)
        • JPA (3)
        • Security (0)
        • 튜토리얼 (1)
        • 기타 (0)
      • Infra (0)
        • Docker (0)
        • AWS (0)
        • NCP (0)
        • GCP (0)
      • React (19)
      • 서버 (0)
      • Computer Science (16)
        • SW Engineering (10)
        • Data Base (2)
        • OS(운영 체제) (4)
      • Data science (0)
        • Probability & Random Variab.. (0)
        • Data Analysis(데이터 분석) (0)
      • 자료구조 | 알고리즘 (57)
        • 선형 자료구죠 (6)
        • 비선형 자료구조 (9)
        • 정렬(Sort) (3)
        • 탐색(Brute Force) (7)
        • 분할 정복(Devide Conquer) (3)
        • 동적 계획법 (6)
        • 탐욕(Greedy) (2)
        • 수학 (7)
        • 심화 알고리즘 (10)
      • PS (44)
        • 백준 알고리즘[BOJ] (38)
        • 프로그래머스[programmers] (3)
      • Dev tool (15)
        • 개발 도구 및 환경 (0)
        • vscode (3)
        • Git Hub (4)
        • Chrome 웹스토어 (5)
        • Python 전용 개발환경 (0)
      • 성장기록 (1)
      • 개인 project (14)
        • 홈페이지 만들기 (11)
        • 냉보미 (1)
      • STL(Standard Library) (9)
      • programming Language (1)
        • javascript (1)
      • 기타 (13)
        • html css (11)
      • (책, 글, 블로그)리뷰 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 백준
    • Github
    • Notion
    • 서울과학기술대학교 학술동아리 EC
  • 공지사항

  • 인기 글

  • 태그

    백준
    그리디
    괄호쌍
    브루트포스
    재귀함수
    자료구조
    스택
    탐색
    운영체제
    react
    이분 탐색
    PS
    백트래킹
    C++
    SW 공학
    DP
    분할정복
    BFS
    스프링부트
    순열
    stl
    알고리즘
    완전 탐색
    CS
    프론트엔드
    비트마스킹
    수학
    SW Engineering
    stack
    OS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
BE_개발자
[Programmers] 1844 게임 맵 최단거리 (C++)
상단으로

티스토리툴바