백준 1959번: 달팽이2
문제 설명
- 2차원 배열을 원하는 순서대로 순회해 봅시다.
접근법
오른쪽 -> 아래 -> 왼쪽 -> 위 -> ...
의 움직임이 반복됩니다.- 4개가 반복되기 때문에 나머지 연산을 사용하면 효율적입니다.
- 방향을 바꾸는 경우는 다음과 같습니다.
- 다음 칸이 board를 벗어날 때
- 다음 칸에 0 이외의 숫자가 들어있을 때
- while문 안에서의 구현을 이렇게 생각하면 편합니다.
1.일단 board[x][y]를 채웁니다.
2.그 다음 어느방향으로 움직일지를 결정합니다.- 검증된 xy가 들어오기 때문에 1번에서 일단 board[x][y]를 채우는게 가능합니다.
정답
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] s = br.readLine().split(" ");
int M = Integer.parseInt(s[0]);
int N = Integer.parseInt(s[1]);
int x = 0;
int y = 0;
int[][] board = new int[M][N];
int[][] direction = {{0,1},{1,0},{0,-1},{-1,0}};
int d = 0;
int cnt = 0;
int answer = 0;
while (cnt<M*N) {
board[x][y] = ++cnt;
if (0<=x+direction[d][0] && x+direction[d][0]<M && 0<=y+direction[d][1] && y+direction[d][1]<N && board[x+direction[d][0]][y+direction[d][1]] == 0) {
}else {
d = (d+1)%4;
answer ++;
}
x+=direction[d][0];
y+=direction[d][1];
}
System.out.println(answer-1);
}
}
Author And Source
이 문제에 관하여(백준 1959번: 달팽이2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@qwerty1434/백준-1959번-달팽이2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)