PS/코드트리
[코드트리 챌린지] 1주차 - 빙빙 돌며 숫자 사각형 채우기(Python, Java)
행복한라이언
2023. 9. 7. 17:55
728x90
반응형
문제링크
https://www.codetree.ai/cote/13/problems/snail-number-square?&utm_source=clipboard&utm_medium=text
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
핵심
코드
n, m = map(int,input().split())
board = [[0 for _ in range(m)]for _ in range(n)]
# 동남서북
dr = [0, 1, 0, -1]
dc = [1, 0, -1, 0]
# 초기값 설정
cr, cc = 0, 0
cur_dir = 0
board[cr][cc] = 1
def in_range(r, c):
return 0 <= r < n and 0 <= c < m
for num in range(2, n * m + 1):
nr = cr + dr[cur_dir]
nc = cc + dc[cur_dir]
if not in_range(nr, nc) or board[nr][nc] != 0:
cur_dir = (cur_dir + 1) % 4
nr = cr + dr[cur_dir]
nc = cc + dc[cur_dir]
board[nr][nc] = num
cr, cc = nr, nc
for row in board:
print(*row)
import java.io.*;
import java.util.*;
public class Main {
// 변수선언
private static final int MAX_N = 100, MAX_M = 100;
private static int curDir = 0;
private static int n, m;
private static int cr = 0, cc = 0;
// 정적 배열 생성
private static int[][] board = new int[MAX_N][MAX_M];
// 동남서북
private static int[] dr = new int[]{0, 1, 0, -1};
private static int[] dc = new int[]{1, 0, -1, 0};
// 격자 내 범위 체크
private static boolean inRange(int cr, int cc){
return 0 <= cr && cr < n && 0 <= cc && cc < m;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// 입력
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
// 초기값 - main에서 실행해야함.
board[cr][cc] = 1;
for(int i = 2; i < n * m + 1; i++){
int nr = cr + dr[curDir];
int nc = cc + dc[curDir];
if(!inRange(nr, nc) || board[nr][nc] != 0){
curDir =(curDir + 1) % 4;
nr = cr + dr[curDir];
nc = cc + dc[curDir];
}
board[nr][nc] = i;
// 마지막 좌표가 바뀜
cr = nr;
cc = nc;
}
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
System.out.print(board[i][j] + " ");
}
System.out.println();
}
}
}
728x90
반응형