Java Coding Test Inflearn : 좌석 배정 문제

song yuheon·2023년 10월 22일
0

Java Algorithm

목록 보기
12/18

문제 : 좌석 배정 문제

강연장에는 가로 c개, 세로 r개의 좌석이 c×r 격자 형태로 배치되어 있으며, 각 좌석은 (x, y) 좌표로 표시됩니다. 사람들은 (1, 1) 좌석부터 시작하여 시계 방향으로 돌아가며 빈 좌석에 차례대로 앉습니다. 강연장의 크기 (c, r)와 몇 번째 사람 k가 주어졌을 때, k번째로 온 사람이 앉을 좌석 번호를 반환하는 프로그램을 작성하는 것이 문제입니다. 만약 k번째 사람이 앉을 좌석이 없다면 [0, 0]을 반환합니다.


문제 풀이 설계



문제 풀이 구현 코드


class ChairNumber {
    public int[] solution(int c, int r, int k) {
        int[] answer = new int[2];
        int[] dx = {0, 1, 0, -1};
        int[] dy = {1, 0, -1, 0};
        int maxX = c-1, maxY = r-1, minX = 0, minY = 0, d = 0;

        for (int i = 0; i < c*r; i++) {
            if(i==k-1) {
                answer[0]++;
                answer[1]++;
                return answer;
            }
            if (d == 0 ) {
                if (answer[1] == maxY) {
                    minX++;
                    d = 1;
                }
            }
            else if (d == 1) {
                if (answer[0] == maxX) {
                    maxY--;
                    d = 2;
                }
            }
            else if (d == 2 ) {
                if (answer[1] == minY) {
                    maxX--;
                    d = 3;
                }
            }
            else if (d == 3 ) {
                if (answer[0] == minX) {
                    minY++;
                    d = 0;
                }
            }
            answer[0] += dx[d];
            answer[1] += dy[d];


        }
        return new int[2];
    }
}

결과



profile
backend_Devloper

0개의 댓글