-
프로그래머스 - 정수를 나선형으로 배치하기제로부터 C# 코딩테스트 2023. 11. 22. 21:10728x90
주어진 n으로 n*n의 배열을 나선형으로 배치한 이차원 배열을 만드는 문제.
1. 방문처리할 배열을 만듭니다.
2. 이동경로 (4가지방향)을 가지고있는 이차원 배열을 만듭니다.(경로는 오른쪽,아래,왼쪽,위 순으로 이동할 것)
3. 나선형으로 n*n 숫자까지 반복 할 것이기 때문에 listIdx를 만들어줍니다.(경로를 바꿀때마다 ++, 경로의 인덱스를 넘길시 %4)
4. n*n 숫자까지 모두 채울 때 가지 반복할 것이기 때문에 while문을 만들어 줍니다.
5. 조건으로 다음으로 이동할 배열이 이차원 배열을 넘어가지 않으면서 방문하지 않았으면 다음으로 이동할 배열에 현재배열 ++ 해주고 방문 처리를 해준뒤 다음으로 이동할 배열위치를 List에 담아줍니다. 조건에 해당 되지않았을 경우는 경로를 바꿔주야 함으로 경로인덱스를++ 해주고 기존배열 좌표를 list에 담아줍니다.
6. 경로인덱스는 경로가 바뀔때마다 ++ 해줌으로 기존의인덱스를 초과를 해버릴 것이기 떄문에 %4를 해줍니다.
using System; using System.Collections.Generic; public class Solution { public int[,] solution(int n) { int[,] answer = new int[n,n]; bool[,] visited = new bool[n,n]; int[,] move = new int[,]{{0,1},{1,0},{0,-1},{-1,0}}; int listIdx = 0; List<int[]> list = new List<int[]>(); list.Add(new int[]{0,0}); visited[0,0] = true; answer[0,0] = 1; int count = 1; while(count < n*n){ int[] current = list[0]; list.RemoveAt(0); int x = current[0]; int y = current[1]; int nx = x + move[listIdx,0]; int ny = y + move[listIdx,1]; if(nx>=0 && ny >= 0 && nx < n && ny < n && !visited[nx,ny]){ list.Add(new int[]{nx,ny}); answer[nx,ny] = answer[x,y]+1; visited[nx,ny] = true; count++; }else{ listIdx++; list.Add(new int[]{x,y}); } listIdx %=4; } return answer; } }
728x90'제로부터 C# 코딩테스트' 카테고리의 다른 글
프로그래머스 - 신고 결과 받기 (0) 2023.12.16 프로그래머스 소수 만들기 (0) 2023.11.29 프로그래머스 - 안전지대 (0) 2023.11.21 프로그래머스 - 저주의 숫자 3 (0) 2023.11.20 프로그래머스 - 광물 캐기 (0) 2023.11.17