현재 바라보는 방향(cur_dir) 변수 선언 & 동(0) 남(1) 서(2) 북(3) 로 설정하기
시계방향 90도 회전 cur_dir = (cur_dir + 1) % 4
반시계방향 90도 회전 cur_dir = (cur_dir -1 + 4) % 4
180도 회전 cur_dir = (cur_dir + 2) % 4
1. 좌표
# 동(0)남(1)서(2)북(3)
dx = [1, 0, -1, 0]
dy = [0, -1, 0, 1]
# 현재 바라보는 상태 북쪽
cur_dir = 3
# 시계방향 90 회전
cur_dir = (cur_dir + 1) % 4
# 반시계방향 90 회전
cur_dir = (cur_dir - 1 + 4) % 4
# 방향으로 1칸 전진
nr = cr + dr[cur_dir]
nc = cc + dc[cur_dir]
//초기값
public static int x = 0, y = 0;
public static int curDir = 3;
//좌표계 - 동남서북
public static int[] dx = new int[]{1, 0, -1, 0};
public static int[] dy = new int[]{0, -1, 0, 1};
// 반시계
public static void moveLeft(char dir){
curDir = (curDir -1 + 4) % 4;
}
//시계
public static void moveRight(char dir){
curDir = (curDir + 1) % 4;
}
//전진
public static void moveFront(){
x += dx[curDir];
y += dy[curDir];
}
2. 격자
# 격자에서는 x, y 보다는 r, c가 이해하기 쉽다.
# 동쪽으로 이동! 열 증가 / 서쪽으로 이동! 열 감소
# 북쪽으로 이동! 행 감소 / 남쪽으로 이동! 행 증가
# 동(0)남(1)서(2)북(3)
drs = [0, 1, 0, -1]
dcs = [1, 0, -1, 0]
# 초기값
cr, cc = 0, 0
# 상하좌우
for dr, dc in zip(drs, dcs):
print(dr, dc)
nr = cr + dr
nc = cc + dc
# 격자 내에 있는지 체크(n x n 배열)
def check(r, c):
return 0 <= r < n and 0 <= c < n
# 시간복잡도 O(100 * 100 * 4) = O(N^2)
# 브루트포스
n = int(input())
board = [list(map(int, input().split())) for _ in range(n)]
# 동(0)남(1)서(2)북(3)
drs = [0, 1, 0, -1]
dcs = [1, 0, -1, 0]
def in_range(r, c):
return 0 <= r < n and 0 <= c < n
def check(cr, cc):
cnt = 0
for dr, dc in zip(drs, dcs):
nr = cr + dr
nc = cc + dc
if in_range(nr, nc) and board[nr][nc] == 1:
cnt += 1
if cnt >= 3:
return 1
return 0
res = 0
for cr in range(n):
for cc in range(n):
res += check(cr, cc)
print(res)
import java.io.*;
import java.util.*;
public class Main {
private static final int MAX_N = 100;
private static final int DIR_NUM = 4;
// 이동 - 동남서북
private static int[] dr = new int[]{0, 1, 0, -1};
private static int[] dc = new int[]{1, 0, -1, 0};
// 2차원 배열 생성 및 배열의 크기
private static int n;
private static int[][] arr = new int[MAX_N][MAX_N];
//in_range 체크
private static boolean inRange(int r, int c){
return (0 <= r && r < n) && (0 <= c && c < n);
}
//근접 1 체크
private static int check(int cr, int cc){
int cnt = 0;
for(int i = 0; i < DIR_NUM; i++){
int nr = cr + dr[i];
int nc = cc + dc[i];
if(inRange(nr, nc) && arr[nr][nc] == 1)
cnt++;
}
if(cnt >= 3)
return 1;
return 0;
}
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());
for(int i = 0; i < n; i++){
st = new StringTokenizer(br.readLine());
for(int j =0; j < n; j++){
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
int ans = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
ans += check(i, j);
}
}
System.out.print(ans);
}
}