[백준]1913번 달팽이
[백준]1913번 달팽이
문제 풀이
(1:30)
작년 하반기 부터 보던 코테에서 이런 문제가 굉장히 많이 나오고 있고 나는 매 번 풀 지 못하고 있다.
레벨은 낮은 문제임에도 마냥 어렵게 느껴졌다.
import java.io.*;
import java.util.*;
public class Main {
public static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static int parseInt(String target){ return Integer.parseInt(target);}
public static StringTokenizer st;
public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static int target;
public static int tr, tc; // target 위치
public static int n;
public static int[][] board;
public static int[][] dirs = new int[][]{{0,1},{0,-1},{1,0},{-1,0}}; // 오른쪽, 왼쪽, 아래, 위
public static void setting() throws IOException {
n = Integer.parseInt(br.readLine());
board = new int[n][n];
target = Integer.parseInt(br.readLine());
}
public static void fill(){
int circle = n/2; // 바퀴 수
// 현재 위치
int[] loc = new int[2];
loc[0] = circle;
loc[1] = circle;
board[loc[0]][loc[1]] = 1;
int movNumb = 1;
// 이동 횟수
// n 은 항상 홀수이기 때문에 (위, 오른쪽, 아래, 왼쪽, 위 ) 의 패턴을 계속한다
int cnt = 2;
int circleCnt = 0;
while (circleCnt < circle){
// 맨 처음에는 위로 한 칸 이동 하는 거로 시작
cnt = move(loc, 3, 1, cnt);
// 오른쪽 이동
cnt = move(loc, 0, movNumb, cnt);
// 아래로 이동
movNumb++;
cnt = move(loc, 2, movNumb, cnt);
// 왼쪽 이동
cnt = move(loc, 1, movNumb, cnt);
// 마지막에 위로 이동
cnt = move(loc, 3, movNumb, cnt);
movNumb++;
circleCnt++;
}
// target 이 1 인 경우는 따로 업데이트 ( 시작 cnt 를 2로 했어서 )
if (target == 1) {
tr = circle; tc = circle;
}
}
// 정답 출력 메소드
public static void printBoard() throws IOException{
for(int r = 0 ; r<n;r++){
for(int c =0;c<n;c++)
bw.write(board[r][c]+" ");
bw.write("\n");
}
bw.write((tr+1)+" "+(tc+1)+"\n");
bw.flush();
bw.close();
}
// 현재위치, 방향, 이동횟수
public static int move(int[] loc, int dir, int movCnt, int cnt){
for(int cur = 0 ; cur < movCnt; cur++){
loc[0] += dirs[dir][0];
loc[1] += dirs[dir][1];
board[loc[0]][loc[1]] = cnt++; // board 에 값을 채워 넣는다
// target 칸 인 경우
if( board[loc[0]][loc[1]] == target){
tr = loc[0];
tc = loc[1];
}
}
return cnt;
}
public static void main(String[] args)throws IOException {
setting();
fill();
printBoard();
}
}
Author And Source
이 문제에 관하여([백준]1913번 달팽이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ynoolee/백준1913번-달팽이저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)