-
[코드트리 조별과제] Dx, Dy 테크닉Algorithm 2024. 8. 18. 23:13
코딩테스트에 감이 떨어지기도 하고, 코테를 꾸준하게 도전하기 위해 코드트리 조별과제에 참여하게 되었다.
내가 스스로 공부한 것을 조별과제에 참여할 겸, 기록에 남기기위해 정리하려고한다.
dx, dy의 테크닉
우리는 특정방향(동서남북)을 이동하려고 하는 것을 코드로 표현할 때, 아래와 같이 코드로 바꿔볼 수 있습니다.
0 1 2 3 dx 1 0 -1 0 dy 0 -1 0 1 방향 회전을 위한 dx, dy 정의 방법
우리는 시계 방향으로 90도 회전을 하는 방법으로 dirNum을 1씩 증가시키는 방법을 사용할 수 있다.
아래는 예시 코드이다.
int[] dx = new int[]{1, 0, -1, 0}; int[] dy = new int[]{0, -1, 0, 1}; int dirNum = 1; int nx, ny; if (dirNum == 0) dirNum = 1; else if (dirNum == 1) dirNum = 2; else if (dirNum == 2) dirNum = 3; else dirNum = 0; nx = x + dx[dirNum]; ny = y + dy[dirNum];
다시말하자면, 시계방향으로 돌리는 것은 1을 증가시키는 것만으로도 가능하다.
다만, 3인경우는 +1을 했을 때 다시 0으로 되어야하므로 (dir + 1) % 4로 표현할 수 있다.
반시계 방향은 현재 dirNum에서 -1을 빼주면 된다.
하지만, 음수의 값을 갖게 되면 안되므로, (dirNum - 1 + 4) % 4 로 표현 할 수 있다.
문자에 따른 명령2
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
import java.io.*; import java.util.*; public class Main { static int[] dx = new int[]{1, 0, -1, 0}; static int[] dy = new int[]{0, -1, 0, 1}; public static void main(String[] args) throws Exception { // 여기에 코드를 작성해주세요. // L 왼쪽 R 오른쪽 F 직진 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); int dir = 3; char[] arr = input.toCharArray(); int nx = 0, ny = 0; int x = 0, y = 0; for (char c : arr) { if (c == 'L') { dir = (dir - 1 + 4) % 4; } else if (c == 'R') { dir = (dir + 1) % 4; } else { nx += dx[dir]; ny += dy[dir]; } } System.out.println(nx + " " + ny); } }
'Algorithm' 카테고리의 다른 글
[코드트리 조별과제] 시뮬레이션 (0) 2024.08.11 [코드트리 조별과제] 객체 (0) 2024.08.04 [코드트리 조별과제] 재귀함수 (0) 2024.07.28