Lv2. 거리두기 확인하기 Javascript
https://programmers.co.kr/learn/courses/30/lessons/81302#fn1
function solution(places) {
const answer = []
places.forEach(place => {
answer.push(verify(place))
})
return answer
}
function verify(place) {
const len = place.length
for (let i = 0; i < len; i++) {
for (let j = 0; j < len; j++) {
if (place[i][j] === 'X') continue;
let count = 0;
if (place[i - 1] && place[i - 1][j] === 'P') count++
if (place[i + 1] && place[i + 1][j] === 'P') count++
if (place[j - 1] && place[i][j - 1] === 'P') count++
if (place[j + 1] && place[i][j + 1] === 'P') count++
if (place[i][j] === 'P') {
if (count > 0) return 0
}
if (place[i][j] === 'O') {
if (count >= 2) return 0
}
}
}
return 1
}
function solution(places) {
const answer = []
places.forEach(place => {
answer.push(verify(place))
})
return answer
}
function verify(place) {
const len = place.length
for (let i = 0; i < len; i++) {
for (let j = 0; j < len; j++) {
if (place[i][j] === 'X') continue;
let count = 0;
if (place[i - 1] && place[i - 1][j] === 'P') count++
if (place[i + 1] && place[i + 1][j] === 'P') count++
if (place[j - 1] && place[i][j - 1] === 'P') count++
if (place[j + 1] && place[i][j + 1] === 'P') count++
if (place[i][j] === 'P') {
if (count > 0) return 0
}
if (place[i][j] === 'O') {
if (count >= 2) return 0
}
}
}
return 1
}
- 우측과 하단만 생각하고 풀는 뻘짓
- 테스트케이스 3번 실패 시 아래 케이스 확인
["OOPOO", "OPOOO", "OOOOO", "OOOOO", "OOOOO"]
- P일 경우 뿐만 아니라 O의 입장에서 생각해보니 두칸 떨어진 자리도 검증이 가능했음. 이런식으로 최대한 코딩을 덜 할 수 있는 전략을 잘 짜야하는데..
댓글 환영
질문 환영
by.protect-me