반응형
1954. 달팽이 숫자
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
문제 분석
- 달팽이는 1부터 N*N까지의 숫자가 시계방향으로 이루어져 있다.
- 다음과 같이 정수 N을 입력 받아 N크기의 달팽이를 출력해라
해결 포인트
- 달팽이가 움직이는 방향 배열을 구현 (상하좌우)
- int [] dx = {0, +1, 0, -1};
int [] dy = {1 , 0, -1, 0};
- int [] dx = {0, +1, 0, -1};
- 0미만 N초과 체크를 쉽게하기 위해 배열의 크기를 2 크게 설정
- 배열의 다음 인덱스를 확인할 때 숫자가 0이 아니면 (수가 존재하지 않으면) 방향 전환
if (nums[x+dx[move]][y+dy[move]] != 0) {
move = (move + 1) % 4;
}
코드
import java.util.*;
class Solution {
public static void main(String args[]) throws Exception {
//System.setIn(new FileInputStream("res/input.txt"));
Scanner sc = new Scanner(System.in);
int T;
T = sc.nextInt();
for (int test_case = 1; test_case <= T; test_case++) {
int N = sc.nextInt();
int [] dx = {0, +1, 0, -1};
int [] dy = {1 , 0, -1, 0};
int[][] nums = new int[N+2][N+2];
int x = 1;
int y = 1;
int move = 0;
for (int i = 0; i < N+2; i++) {
nums[0][i] = -1;
nums[i][0] = -1;
nums[N+1][i] = -1;
nums[i][N+1] = -1;
}
for (int i = 1; i <= N*N; i++) {
nums[x][y] = i;
if (nums[x+dx[move]][y+dy[move]] != 0) {
move = (move + 1) % 4;
}
x += dx[move];
y += dy[move];
}
System.out.println("#"+ test_case);
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
System.out.print(nums[i][j] + " ");
}
System.out.println();
}
}
}
}
반응형
'CodingTEST' 카테고리의 다른 글
[SW Expert D2] 1946. 간단한 압축 풀기 (0) | 2023.11.18 |
---|---|
[SW Expert D2] 1948. 날짜 계산기 (0) | 2023.11.18 |
[SW Expert D2] 1959. 두 개의 숫자열 (0) | 2023.11.18 |
[SW Expert D2] 1961. 숫자 배열 회전 (0) | 2023.11.17 |
[SW Expert D2] 1970. 쉬운 거스름돈 (0) | 2023.11.17 |