21237번 Clockwise Fence
문제
번역
울타리를 설치했는데 울타리가 시계 방향으로 설치되었는지 반시계 방향으로 설치되었는지 구하시오.
시작점과 도착점은 같으며 울타리가 하나의 영역을 감싸고 있는게 보장된다.
설계
신발끈 공식을 써서 양수면 반시계 방향, 음수면 시계 방향이다.
구현
NSWE 형식으로 방향이 들어오니 Map으로 방향 별 더할 좌표를 구성해두고
방향 데이터를 받아서 순회하며 신발끈 공식으로 면적을 구한다.
int N = Integer.parseInt(br.readLine());
// 방향
Map<Character, Integer> dx = new HashMap<>();
dx.put('N', 0);
dx.put('E', 1);
dx.put('S', 0);
dx.put('W', -1);
Map<Character, Integer> dy = new HashMap<>();
dy.put('N', 1);
dy.put('E', 0);
dy.put('S', -1);
dy.put('W', 0);
while(N-- > 0) {
char[] fences = br.readLine().toCharArray();
int x = 0;
int y = 0;
int result = 0;
for(int i = 0 ; i < fences.length ; i++) {
int nx = x + dx.get(fences[i]);
int ny = y + dy.get(fences[i]);
// 신발끈 공식
result += x * ny - y * nx;
// 이전 좌표 갱신
x = nx;
y = ny;
}
// 음수면 시계 방향 아니면 반시계 방향
if(result < 0) bw.write("CW\n");
else bw.write("CCW\n");
}
채점
반성
파이썬 하다가 자바 보니까 코드가 못났다.
점점 파이썬에 스며드는 중이다.
코드 확인