Notice
Recent Posts
Link
- Today
- Total
hye-log
[정올]1707번 달팽이사각형(JAVA) 본문
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