Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 백준 c++ 2870번
- 백준 1103번 게임
- 백준 1103번
- 백준
- 백준 2870번
- 수학숙제
- Beakjoon
- Unity
- 2870번 c++
- 2870번 수학숙제
- dfs
- 2870번 수학숙제 c++
- 17070번
- 코딩테스트
- 2870번
- 2468 c++
- Lv.3
- 백준 c++ 2468번
- 백준 17070번
- C#
- 오브젝트 풀링
- Algorithm
- c++
- Lv2
- 플레이어 이동
- 코테
- 백준 17070번 c++
- 백준 1103번 c++
- 프로그래머스
- 유니티
Archives
- Today
- Total
주녘공부일지
[프로그래머스 C#] Lv.2 게임 맵 최단거리 본문
https://school.programmers.co.kr/learn/courses/30/lessons/1844
1. 정답코드 및 핵심 아이디어, 유의사항
- 현재 위치와 누적이동횟수를 class Pos를 선언해서 각 좌표와 누적이동횟수를 나타냄
- 지나온 길은 다시 가도 의미가 없기 때문에 벽과 동일하게 처리함 ( 최단 거리 )
-> 방문 배열을 따로 선언하지 않고 주어진 maps를 방문배열로 활용 ( 방문 : 0, 미방문 : 1 )
- 최단 거리를 구하는 문제이므로 BFS(너비 우선 탐색) 알고리즘 적용
https://godgjwnsgur7.tistory.com/47
using System;
using System.Collections.Generic;
class Solution
{
public class Pos
{
public int y;
public int x;
public int count; // 이동 횟수
public Pos(int y, int x, int count)
{
this.y = y;
this.x = x;
this.count = count;
}
}
public int solution(int[,] maps)
{
// maps를 방문배열로 활용 (방문 : 0, 미방문 : 1)
var dirY = new int[4] { 0, 0, 1, -1 };
var dirX = new int[4] { 1, -1, 0, 0 };
var queue = new Queue<Pos>();
// 시작좌표
queue.Enqueue(new Pos(0, 0, 1));
maps[0, 0] = 0;
// BFS
while (queue.Count != 0)
{
// 현재 위치
Pos currPos = queue.Dequeue();
// dirX, dirY를 이용해 현재 위치에서 이동 가능한 4방향을 나타냄
for (int i = 0; i < 4; i++)
{
// 이동하려는 위치
Pos movePos = new Pos(currPos.y + dirY[i], currPos.x + dirX[i], currPos.count + 1);
// 배열 범위 범어남 (게임 맵을 벗어남)
if (movePos.y < 0 || movePos.y >= maps.GetLength(0) ||
movePos.x < 0 || movePos.x >= maps.GetLength(1))
continue;
// 적 진영에 도착
if (movePos.y == maps.GetLength(0) - 1 &&
movePos.x == maps.GetLength(1) - 1)
return movePos.count;
// 벽이거나 이미 탐색된 길
if (maps[movePos.y, movePos.x] == 0)
continue;
maps[movePos.y, movePos.x] = 0; // 방문처리
queue.Enqueue(movePos); // 다음 탐색 대상
}
}
return -1;
}
}
'CodingTest > Programmers Lv.2' 카테고리의 다른 글
[프로그래머스 C#] Lv.2 삼각 달팽이 (1) | 2023.12.08 |
---|---|
[프로그래머스 C#] Lv.2 귤 고르기 (1) | 2023.12.08 |
[프로그래머스 C#] Lv.2 N-Queen (1) | 2023.12.07 |
[프로그래머스 C#] Lv.2 최솟값 만들기 (1) | 2023.12.07 |
[프로그래머스 C#] Lv.2 피보나치 수 (0) | 2023.12.07 |