일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 개발상식
- 접근법
- CONVERTER
- 다이나믹프로그래밍
- 백준
- 면접
- spring
- js
- vsCode
- 동적계획법
- 완전탐색
- 1003
- java
- 알고리즘
- 발자취
- dp
- 코딩테스트
- react
- notion
- IT-Note
- 패스트캠퍼스
- 현파랑
- 프로그래멋
- webpack
- DFS
- Notion to Github Markdown
- spring-mvc
- Prettier
- ESLint
- BFS
Archives
- Today
- Total
두 번째 뇌
[JS] DFS : 거리 두기 확인하기(2021 카카오 인턴십) 본문
개요
상반기 카카오 인턴십 문제로 출제되었던 Level 2 코딩테스트 문제입니다. DFS를 충분히 활용해서 풀어야겠지만... 아직 이론을 이해하지 못해서ㅠ 코드가 길어진 것 같습니다.
문제
https://programmers.co.kr/learn/courses/30/lessons/81302
코드
🤩 : DFS로 풀기
function solution(places) {
let answer = Array(places.length).fill(0);
// 문자열로 주어지는 대기실을 배열로 변경하기
places = places.map(p => p.map(i => i.split('')));
// 상하좌우 좌표를 미리 선언해두기
let dx = [-1, 0, 1, 0];
let dy = [0, 1, 0, -1];
for (let i = 0; i < places.length; i++) {
DFS(i);
}
function DFS(lc) {
answer[lc] = 1;
let place = places[lc];
// 행
for (let i = 0; i < 5; i++) {
// 열
for (let j = 0; j < 5; j++) {
// X, O인 경우는 탐색할 필요가 없으니 패스하기
if (place[i][j] !== 'P') continue;
for (let k = 0; k < 4; k++) {
let nx = i + dx[k];
let ny = j + dy[k];
if (nx >= 0 && nx < 5 && ny >= 0 && ny < 5) {
// 인접 상하좌우 좌표에 사람이 있다면 거리두기 미준수
if (place[nx][ny] === 'P') {
answer[lc] = 0;
return;
} else if (place[nx][ny] === 'O') {
// 테이블이 있다면 다시 상하좌우 좌표를 확인하기
for (let k2 = 0; k2 < 4; k2++) {
let nx2 = nx + dx[k2];
let ny2 = ny + dy[k2];
// 현재 루프를 도는 좌표와 동일하면 미체크
if(nx2 === i && ny2 === j) continue;
if (nx2 >= 0 && nx2 < 5 && ny2 >= 0 && ny2 < 5) {
// 인접 상하좌우가 P O P인 상황으로 거리두기 미준수
if (place[nx2][ny2] === 'P') {
answer[lc] = 0;
return;
}
}
}
}
}
}
}
}
}
return answer;
}
'개발자 지식 > Algorithm' 카테고리의 다른 글
[ Python ] 1003번 피보나치 함수 (0) | 2021.08.01 |
---|---|
[ Python ] BOJ 단계별 풀어보기 - 동적계획법 1 (0) | 2021.07.31 |
[ Python ] BOJ 단계별 풀어보기 - 문자열 (0) | 2021.07.31 |
[JS] 투 포인터(Two-Pointers) : 연속 부분수열 (0) | 2021.07.04 |
[JS] 완전탐색(brute-force) : 자릿수의 합 (0) | 2021.07.02 |
Comments