서크호
서크호 - 개발 스토리
서크호
전체 방문자
오늘
어제
  • 분류 전체보기 (22)
    • TEAM 알고싶다 (17)
      • 성공 문제 (16)
      • 실패 문제 (1)
    • JavaScript (0)
    • TypeScript (0)
    • Node.js (2)
      • React.js (0)
      • Next.js (0)
      • NestJS (2)
    • Baekjoon (Node.Js) (1)
    • Error Box (1)
    • MySQL (1)
    • JAVA (0)
    • Andriod (0)
    • Spring Boot (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 백준
  • 백준 적록색약
  • javascript
  • 적록색약 nodejs
  • NestJs PassPort
  • nodejs
  • NestJs Strategy
  • Nest DB
  • NestJs session
  • Nest Typeormm
  • Nestjs
  • NestJS ValidationPipe
  • NestJs login
  • 적록색약 javascript
  • 10026 node
  • 10026
  • Nest mysql

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
서크호
TEAM 알고싶다/성공 문제

[프로그래머스] JavaScript - 거리두기 확인하기

TEAM 알고싶다/성공 문제

[프로그래머스] JavaScript - 거리두기 확인하기

2022. 7. 27. 00:18

📄 문제

문제 너무 길어서 사진!
입출력 예시


📝 나의 풀이

function solution(places) {
  let answer = [];
  const bfs = (place) => {
    let target = [];
    place.forEach((a) => {
      let item = a.split("");
      target.push(item);
    });

    let box = [];
    for (let i = 0; i < 5; i++) {
      for (let j = 0; j < 5; j++) {
        if (target[i][j] === "P") {
          box.push([i, j]);
        }
      }
    }

    let dx = [-1, 1, 0, 0];
    let dy = [0, 0, 1, -1];

    while (box.length != 0) {
      const [x, y] = box.shift();

      for (let i = 0; i < 4; i++) {
        let nx = x + dx[i];
        let ny = y + dy[i];

        if (nx < 0 || nx >= 5 || ny < 0 || ny >= 5) continue;

        if (target[nx][ny] == "X") continue;

        if (target[nx][ny] == "P") return 0;

        for (let j = 0; j < 4; j++) {
          let newX = nx + dx[j];
          let newY = ny + dy[j];

          if (newX < 0 || newX >= 5 || newY < 0 || newY >= 5) continue;

          if (newX == x && newY == y) continue;
          if (target[newX][newY] == "P") return 0;
        }
      }
    }
    return 1;
  };

  for (let i = 0; i < 5; i++) {
    answer.push(bfs(places[i]));
  }

  return answer;
}

통과!


⌨ 접근법

1. 들어오는 입력을 보면 [ [1], [2], [3], [4], [5] ] 5개의 대기실 배열이다. 각 대기실마다 검사하는 bfs 함수를 만든다.

2. bfs 함수 

  2-1. 일단 들어오는 모양 그대로 2차원 배열로 만든다. target[]

  2-2. 그리고 target에 있는 'P' 즉 유저의 좌표를 배열에 넣는다. box[]

  2-3. 동서남북의 방향을 dx, dy 세트로 만든다.

  2-4. 루프 시작 box에 있는걸 하나씩 shift() 하면서 진행한다. 그 대상은 [x,y] 로 들어오니 일단 담아둔다.

  2-5. 가져온 해당 좌표를 4방향 탐색한다. target 영역 밖인 방향이면 바로 다음 방향으로 continue

  2-6. target 영역 안이지만 'X' 즉 파티션을 만나면 막혀있으니 continue

  2-7. 탐색 중 'P' 즉 다른 응시자를 만나면 바로 return 0 으로 거리두기 안되는 대기실

  2-8. 2-5 ~ 2-7 까지를 모두 통과한 녀석이라면 그 방향에서 다시 한 번 4방향 탐색

  2-9. 위와 마찬가지로 target영역 밖이면 continue, 왔던 방향은 바로 continue, 응시자를 만나면 return 0

  2-10. 2-5 ~ 2-9 로직을 완료하면 거리두기 제약사항에 걸리지 않으므로 1 지키고 있는 대기실!

3. bfs함수를 대기실 배열들 마다 돌리고 미리 선언해두었던 answer 배열에 결과를 넣어주면 완성!


😤 스토리

- 이 문제는 스터디 1기 시절에 풀었던 문제이다 (지금은 2기)

 

- 올린 코드에는 주석이 없지만 한 줄에 하나씩 주석을 달아가며 열심히 풀었던 문제다.

 

- 풀었던 문제여서 JAVA로 코드를 옮겨 보려 했는데 어우 너무 어려워서 그냥 javascript 버전만 포스팅 한다. ㅜㅜ

 

- 자바 조금씩 기본 강의부터 보는데 얼른 익혀서 그린이랑 같이 자바도 조금씩 해야겠다.


📚 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/81302?language=javascript

 

 

프로그래머스

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

programmers.co.kr

 

저작자표시 (새창열림)

'TEAM 알고싶다 > 성공 문제' 카테고리의 다른 글

[프로그래머스] JavaScript - 다리를 지나는 트럭  (0) 2022.08.09
[Baekjoon (Node.js)] 1065번 한수  (0) 2022.07.31
[Baekjoon (Node.js)] 10026번 적록색약  (0) 2022.07.19
[Baekjoon (Node.js)] 11724번 연결 요소의 개수  (0) 2022.07.13
[Baekjoon (Node.js)] 24479번 알고리즘 수업 - 깊이 우선 탐색 1  (0) 2022.07.13
    'TEAM 알고싶다/성공 문제' 카테고리의 다른 글
    • [프로그래머스] JavaScript - 다리를 지나는 트럭
    • [Baekjoon (Node.js)] 1065번 한수
    • [Baekjoon (Node.js)] 10026번 적록색약
    • [Baekjoon (Node.js)] 11724번 연결 요소의 개수
    서크호
    서크호
    팀 스터디 및 개인 개발 관련 블로그 입니다!

    티스토리툴바

    개인정보

    • 티스토리 홈
    • 포럼
    • 로그인

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.