코딩 테스트/프로그래머스 코딩 테스트 연습

2Level / 2021 카카오 채용연계형 인턴십 / 거리두기 확인하기

58청춘 2023. 11. 16. 19:37
728x90

문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/81302#fn1

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이 방법

P는 사람이 앉아있는 의미, X는 파티션, O는 빈 테이블을 의미한다.

이 문제는 멘해튼 거리가 2이하가 되면 해당 시험장은 규정이 지켜지지 않는 곳으로 정한다.

 

나는 이 문제를 2가지로 나눠 풀었다.

우선 P가 있는 경우와 O가 있는 경우가 있다.

P와 O는 상하좌우에 P가 있는지 확인하고 없다면 규정이 잘 지켜지고 있다는 것이다.

O의 경우는 상하좌우에 P가 2개 이상이 존재하는지 확인하고 P가 2개 이상 없다면 잘 지켜지고 있는 것이다.

 

 

참고한 코드

const solution = (places) => {
    let answer = Array.from({length: places.length}, () => 1);
    const one = [[0,1], [1,0], [0,-1], [-1,0]];
    
    for(let i = 0; i < 5; i++){
        let room = places[i];
        for(let j = 0; j < 5; j++){
            for(let h = 0; h < 5; h++){
                if(room[j][h] === 'P'){
                    one.forEach(e => {
                        if(room[j+e[0]]?.[h+e[1]] === 'P'){
                            answer[i] = 0;
                        }
                    })
                }
                if(room[j][h] === 'O'){
                    const test = one.filter(e => {
                        return room[j+e[0]]?.[h+e[1]] === 'P';
                    })
                    if(test.length >= 2) answer[i] = 0;
                }
            }
        }
    }
    return answer;
}

 

728x90