[programmers] Lv2. 거리두기 확인하기 | protect-me

protect-me·2021년 9월 8일
0
post-thumbnail

🕊 Link

Lv2. 거리두기 확인하기 Javascript
https://programmers.co.kr/learn/courses/30/lessons/81302#fn1

🧑🏻‍💻 Code(javascript)

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
}

💡 Solution

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
}

👨‍👦‍👦 Others

👨🏻‍💻💭 Self Feedback

  • 우측과 하단만 생각하고 풀는 뻘짓
  • 테스트케이스 3번 실패 시 아래 케이스 확인
    ["OOPOO", "OPOOO", "OOOOO", "OOOOO", "OOOOO"]
  • P일 경우 뿐만 아니라 O의 입장에서 생각해보니 두칸 떨어진 자리도 검증이 가능했음. 이런식으로 최대한 코딩을 덜 할 수 있는 전략을 잘 짜야하는데..

📚 참고
[Programers][Javascript] 거리두기 확인하기 (2021 카카오 인턴쉽)


  • 2021.09.08 - 최초 작성

댓글 환영 질문 환영
by.protect-me

profile
protect me from what i want

0개의 댓글