-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[19주차_월요일] 통나무 옮기기 #255
Comments
🤔 시간복잡도 고려사항
=> BFS 탐색 : O(N * N) 가능 💡 풀이 아이디어
|
🤔 시간복잡도 고려사항
💡 풀이 아이디어
private static boolean canWingRow(int r, int c) { // 가로일때 날개 유효한지
return isValid(r, c-1) && isValid(r, c+1) && board[r][c - 1] == 0 && board[r][c + 1] == 0;
}
private static boolean canWingCol(int r, int c) { // 세로일때 날개 유효한지
return isValid(r-1, c) && isValid(r+1, c) && board[r-1][c] == 0 && board[r+1][c] == 0;
}
private static boolean canTurn(int r, int c, int t) {
for (int i = r - 1; i <= r + 1; i++) {
for (int j = c - 1; j <= c + 1; j++) {
if (!isValid(i, j) || board[i][j]==1) return false;
}
}
return true;
}
|
🤔 시간복잡도 고려사항
💡 풀이 아이디어길이가 3인 통나무의 중심점과 통나무가 수평/수직 중 어떻게 있는지 확인하면서 BFS 진행하기
|
🤔 시간복잡도 고려사항
💡 풀이 아이디어
|
🤔 시간복잡도 고려사항N<=50, 50* 50, 4 * (2) : 💡 풀이 아이디어
private static boolean check(int nx, int ny, int dir) {
if (!isValid(nx, ny)) return false;
if (dir == 0) {
return isValid(nx, ny - 1) && isValid(nx, ny) && isValid(nx, ny + 1);
} else {
return isValid(nx - 1, ny) && isValid(nx, ny) && isValid(nx + 1, ny);
}
}
private static boolean canRotate(int x, int y) {
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
int nx = x + i, ny = y + j;
if (!isValid(nx, ny)) {
return false;
}
}
}
return true;
} ⭐ 참고한 것
for(int i=0; i<n; i++) {
String input = br.readLine();
for (int j = 0; j < n; j++) {
board[i][j] = input.charAt(j);
if (board[i][j] == 'B') {
startX = i;
startY = j; // 중심 좌표 기준으로 관리하기 위한 좌표 저장
} else if(board[i][j]=='E'){
targetX = i;
targetY = j; // 도착 좌표
}
}
}
startDir = (0<startY && board[startX][startY-1]=='B') ? 0:1;
targetDir = (0<targetY && board[targetX][targetY-1]=='E') ? 0:1;
private static int[] findPosition(char target) {
int sumX = 0, sumY = 0, dir = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (board[i][j] == target) {
sumX += i;
sumY += j;
}
}
}
int centerX = sumX / 3; // 중심 좌표 계산 /3
int centerY = sumY / 3; //
if (0 < centerY && board[centerX][centerY - 1] == target) {
dir = 0; // 가로
} else {
dir = 1; // 세로
}
return new int[]{centerX, centerY, dir};
}
|
The text was updated successfully, but these errors were encountered: