hye-log

[정올]1707번 달팽이사각형(JAVA) 본문

CodingTest/Jungol

[정올]1707번 달팽이사각형(JAVA)

iihye_ 2023. 7. 29. 18:21

0. 문제 링크

https://www.jungol.co.kr/problem/1707

 

JUNGOL

history 최근 본 문제

www.jungol.co.kr

 

1. 문제 설명

1) 가장 왼쪽 위의 좌표부터 숫자 대입

2) 오른쪽으로 채워나가다가 아래->왼쪽->위->오른쪽 순으로 채우기

 

2. 입출력

// input
5

// output
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

 

3. 코드

import java.util.*;

public class jol1707 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt(); // 정사각형의 크기
		if(n < 0 || n > 100) { // 범위를 벗어나면 return
			return;
		}
		int[][] arr = new int[n][n]; // 배열 생성
		boolean[][] visited = new boolean[n][n]; // 방문 여부 확인
		
		int[] dr = {0, 1, 0, -1}; // 오른쪽->아래->왼쪽->위
		int[] dc = {1, 0, -1, 0};
		int idx = 0; // 방향
		
		int cnt = 1; // 배열의 값
		int r = 0; // 좌표값
		int c = 0;
		
		arr[r][c] = cnt++; // 초기값 설정
		visited[r][c] = true;
		
		while(idx < 4) {
			if(cnt > n*n) { // 마지막 숫자까지 채우면 종료
				break;
			}
			
			int nr = r + dr[idx]; // 좌표 값
			int nc = c + dc[idx];
			
			if(nr >= 0 && nr < n && nc >= 0 && nc < n && !visited[nr][nc]) { // 경계값 확인
				arr[nr][nc] = cnt++;
				visited[nr][nc] = true;
				r = nr;
				c = nc;				
			} else { // 방향 전환
				idx++; 
			}
			
			if(idx == 4) { // 4 이면 처음 방향으로
				idx = 0;
			}
		}
		
		for(int i = 0; i < n; i++) { // 출력
			for(int j = 0; j < n; j++) {
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}
		
	}

}

 

실행 결과

 

4. 회고

1) 사방탐색을 이용하여 해결

 

5. Github

https://github.com/iihye/Algorithm/blob/main/Jungol/jol1707.java

728x90

'CodingTest > Jungol' 카테고리의 다른 글

[정올]1329번 별삼각형3(JAVA)  (0) 2023.07.29
[정올]1719번 별삼각형2(JAVA)  (0) 2023.07.29
[정올]1523번 별삼각형1(JAVA)  (0) 2023.07.29
Comments