Skip to content

Conversation

@ttasjwi
Copy link
Contributor

@ttasjwi ttasjwi commented May 18, 2022

삽질

  • 요구사항 분석도 지옥
  • 답을 읽어도 이해하는 것도 지옥

풀이

    private int light(String[] grid, int row, int column, int d) {
        int count = 0;

        while (true) {
            if (isVisited[row][column][d]) { // 해당 방향으로 빛이 사출된 이력이 있는 경우 계산하지 않는다.
                break;
            }
            count++; // 거리 1 증가
            isVisited[row][column][d] = true; // 방문 처리
            if (grid[row].charAt(column) == 'L') { // 화살표를 반시계로 회전해야함. d를 -1만큼 움직여야함.
                d = (d == 0) ? 3 : d - 1; // 반시계방향 (좌회전)
            } else if (grid[row].charAt(column) == 'R') { // 화살표를 시계방향으로 회전해야함. d를 +1만큼 움직여야함.
                d = (d == 3) ? 0 : d + 1; // 시계방향 (우회전)
            }

            row = (row + DIRECTION_Y[d] + HEIGHT) % HEIGHT; // 방향을 더했을 때 음이 될 수 있어서 최대 높이/너비 값을 한번 더하고 나머지 처리 해야함
            column = (column + DIRECTION_X[d] + WIDTH) % WIDTH;
        }
        return count;
    }
  • 빛의 사출 이력을 삼차원 배열에 저장하는 특이한 구조였습니다.
  • 방향을 따라 쭉 진행하면서 이미 방문했던 이력이 있는 곳으로 돌아오면 사이클 길이 계산이 끝납니다.
  • 좌회전, 우회전 시 방향 처리, 그리고 행/열 처리 시 나머지 계산... 신경쓸게 많은 문제네요.

@ttasjwi ttasjwi linked an issue May 18, 2022 that may be closed by this pull request
@ak2j38 ak2j38 merged commit e0f05cb into CodeSquad-Algorithm:main May 26, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[2022.05.17(화)] Programmers(86052) : 빛의 경로 사이클

2 participants