반응형
코드트리 블로그 챌린지 2주차 인증입니다
저는 기업별 커리큘럼을 신청하였고 오늘은 삼성 커리큘럼을 풀어 보았습니다
빙빙 돌며 숫자 사각형 채우기 문제를 리뷰해보고자 합니다
https://www.codetree.ai/cote/13/problems/snail-number-square/submissions
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
풀이방법
- n x m의 배열에서 오른쪽 -> 아래 -> 왼쪽 -> 위쪽 방향으로 돌면서 숫자를 채운다
- 이미 방문한 위치 혹은 범위를 벗어나면 방향을 바꾼다
- 반복횟수는 n*m번이므로 범위를 벗어날 때 방향만 바꾸면 된다
import java.io.*;
import java.util.*;
public class Main {
public static int[][] direction = {{0,1}, {1,0}, {0,-1}, {-1,0}};
public static int n, 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());
int[][] answer = new int[n][m];
int x = 0, y = 0, dir = 0;
answer[x][y] = 1;
for (int i=2; i<=n*m; i++) {
int nx = x + direction[dir][0], ny = y + direction[dir][1];
if(!inRange(nx, ny) || answer[nx][ny] != 0) dir = (dir + 1) % direction.length;
x += direction[dir][0];
y += direction[dir][1];
answer[x][y] = i;
}
StringBuilder sb = new StringBuilder();
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
sb.append(answer[i][j]).append(" ");
}
sb.append("\n");
}
System.out.print(sb);
br.close();
}
public static boolean inRange(int x, int y) {
return x<0 || x>=n || y<0 || y>=m ? false : true;
}
}
반응형
'일반' 카테고리의 다른 글
[코드트리 챌린지] 중앙값 계산2 (0) | 2023.10.02 |
---|---|
[코드트리 챌린지] 이동경로상에 있는 모든 숫자 더하기 (0) | 2023.09.25 |
[코드트리 챌린지] 체크판 위에서2 (0) | 2023.09.11 |
코드트리 블로그챌린지 인증용 (0) | 2023.09.02 |
intellij mac 명령 단축키 (0) | 2023.07.15 |