[알고리즘] 구현 - JAVA

sangwoo·2022년 11월 11일

📌 동빈나님의 알고리즘 강의 영상을 듣고 정리한 내용입니다.!

구현

풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제

예시

  • 알고리즘은 간단하지만 코드가 길어지는 문제
  • 실수 연산을 다루고, 특정 소수점 자리까지 출력해야하는 문제
  • 문자열을 끊어 처리해야 하는 문제
  • 적절한 라이브러리를 찾아서 사용해야한는 문제

시뮬레이션

2차원(행렬)

  • 2차원 배열은 행렬의 의미로 사용
  • 왼쪽 제일 위의 위치는 (0,0)으로 표현, 다른 위치또한 (x, y)로 표현
  • (0,0)을 기준으로 아래 쪽은 행(row), 오른쪽은 열(column)

    ❗ 주의 ❗
    학교에서 배운 x좌표, y좌표의 개념이 아니다. 좌표평면의 개념이 아니라는 것.

행렬에서의 방향 벡터

위 그림에서 열의 방향은 Y, row의 방향은 X이다. 어느 지점에서 상하좌우로 이동하기 위하여 방향 좌표를 만들어 줄수 있다.

(2,2)에서 오른쪽으로 한칸 이동하면 (2, 3)임을 알 수 있다. 그렇다면 무엇이 변했는지 눈에 보일 것이다. (X, Y)의 형태이므로 Y+1을 통해 우측으로 한칸 이동한 형태로 변경이 되었음을 볼 수 있다. 이러한 방법으로 상하좌우의 위치 변경이 모두 가능하다.

상하좌우의 방향좌표를 정리해보자(한칸 이동을 기준으로 작성)
상 -> (-1, 0)
하 -> (1, 0)
좌 -> (0, -1)
우 -> (0, 1)

// 동 북 서 남
int[] dx = {0, -1, 0, 1}
int[] dy = {1, 0, -1, 0}

// 현재 위치 설정
int x = 2
int y = 2

// 이동했을 때 위치의 결과, 인덱스가 0인 경우 우측방향
nx = x + dx[0];
ny = y + dy[0];

0개의 댓글