반응형
DoZZang
Do IT
DoZZang
전체 방문자
오늘
어제
  • Programming
    • Git
    • Web
    • 기타
    • Python
      • CodeUp
    • Math
    • Algorithm
    • Baekjoon
    • C,C++
    • Life
      • 독서
      • Just
      • 영화

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
DoZZang

Do IT

[C++] 2178번 : 미로탐색
Baekjoon

[C++] 2178번 : 미로탐색

2024. 3. 20. 21:44
반응형

https://www.acmicpc.net/problem/2178

 

2178번: 미로 탐색

첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.

www.acmicpc.net

풀이

우선 첫 번째는 입력에서 볼드체로 '붙어서'를 강조하는 모습을 볼 수 있습니다.

string으로 받아야겠다는 생각은 했지만, getline으로 받을 생각이었습니다.

이후.. for(auto c : s)를 통해 접근하고자 했지만 이렇게 구현할 경우 index에 접근이 불가하여 미로의 개념이 구현되지 않습니다.

이 부분은 고민하다가 해답을 참고했습니다.

string s[100] 이라 함은 string 객체를 담는 1차원 배열 s를 선언하는 것과 같습니다.

이를 이용하면 마치 char 2차원 배열을 선언하는 것과 같은 효과를 가집니다. 실제 index 접근도 2차원 배열처럼 할 수 있습니다. (적고보니 char 2차원 배열로 구현하면 됬겠네요.)

 

두 번째 그렇담 최단거리를 어떻게 구할 것인가?입니다. 따로 변수를 선언하여 모든 거리를 저장해놓는 것은 불가능합니다.

조금만 다르게 생각하면?

미로 하나를 더 만들어 각 distance를 누적합 시키면 구하고자 하는 distance를 얻을 수 있습니다.

마침 반드시 0,0에서 시작하여 N-1,M-1에서 끝나는군요.

 

내 코드

 

#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
int dx[4] = { 1,0,-1,0 };
int dy[4] = { 0,1,0,-1 };
int vis[101][101];
int dis[101][101];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int N, M;
	cin >> N >> M;
	string s[102]; //102개의 string object를 저장
	for (int i = 0; i < N; i++) {
		cin >> s[i];
	}
	queue<pair<int, int>> q;
	q.push(make_pair(0, 0));
	dis[0][0] = 1; vis[0][0] = 1;
			while (!q.empty()) {
				pair<int, int> cur = q.front(); q.pop();
				for(int dir = 0; dir < 4; dir++) {
					int x = cur.X + dx[dir];
					int y = cur.Y + dy[dir];
					if (x < 0 || y < 0 || x >= N || y >= M) continue;
					if (vis[x][y] || s[x][y] == '0') continue;
					q.push(make_pair(x, y));
					dis[x][y] = dis[cur.X][cur.Y] + 1;
					vis[x][y] = 1;
				}
			}
	cout << dis[N-1][M-1];
}
반응형
저작자표시 (새창열림)

'Baekjoon' 카테고리의 다른 글

[C++] 7576번 : 토마토  (0) 2024.03.20
[C++] 1926번 : 그림  (0) 2024.03.12
[C++] 1021번 : 회전하는 큐  (0) 2024.03.08
[C++] 2164번: 카드2  (0) 2024.03.07
[C++] 10845 : 큐/18258 : 큐2  (1) 2024.03.06
    'Baekjoon' 카테고리의 다른 글
    • [C++] 7576번 : 토마토
    • [C++] 1926번 : 그림
    • [C++] 1021번 : 회전하는 큐
    • [C++] 2164번: 카드2
    DoZZang
    DoZZang
    과정은 힘들지만 성장은 즐겁습니다.

    티스토리툴바