[JavaScript/프로그래머스] 그래프 - 방의 개수

2023. 5. 16. 13:14·Coding Test/Programmers_JavaScript
728x90

문제 링크

 

프로그래머스

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

programmers.co.kr


 

정답 코드

번호에 따른 이동 방향을 미리 정해두고 대각선 방향의 경우에는 두 번에 걸쳐 이동하도록 설계하였습니다.

function solution(arrows) {
  let answer = 0; // 방의 개수를 저장할 변수

  // 각 방향에 따른 좌표 변화를 저장한 배열
  // prettier-ignore
  const move = [
    [-1, 0], [-1, 1], [0, 1], [1, 1],
    [1, 0], [1, -1], [0, -1], [-1, -1]
  ];

  let vertexVisited = new Map(); // 방문한 정점을 저장할 Map
  let edgeVisited = new Map(); // 방문한 간선을 저장할 Map

  // prettier-ignore
  let x = 0, y = 0; // 현재 위치
  vertexVisited.set(`${x}_${y}`, true); // 시작점을 방문한 것으로 표시

  for (let i = 0; i < arrows.length; i++) {
    for (let j = 0; j < 2; j++) {
      // 대각선 이동을 두 번의 직선 이동으로 나누어 처리
      let nx = x + move[arrows[i]][0]; // 다음 위치의 x 좌표
      let ny = y + move[arrows[i]][1]; // 다음 위치의 y 좌표

      // 다음 위치에 이미 방문했고, 그리고 해당 간선을 아직 방문하지 않았다면
      let isVertexVisited = vertexVisited.has(`${nx}_${ny}`);
      let isEdgeNotVisited = !edgeVisited.has(`${x}_${y}_${nx}_${ny}`);

      if (isVertexVisited && isEdgeNotVisited) {
        answer++; // 방의 개수를 증가
      }

      vertexVisited.set(`${nx}_${ny}`, true); // 다음 위치를 방문한 것으로 표시
      edgeVisited.set(`${x}_${y}_${nx}_${ny}`, true); // 현재 위치에서 다음 위치로 가는 간선을 방문한 것으로 표시
      edgeVisited.set(`${nx}_${ny}_${x}_${y}`, true); // 다음 위치에서 현재 위치로 가는 간선을 방문한 것으로 표시

      x = nx; // 현재 위치를 다음 위치로 이동
      y = ny; // 현재 위치를 다음 위치로 이동
    }
  }

  return answer; // 방의 개수를 반환
}

 


End

728x90
저작자표시 비영리 변경금지 (새창열림)

'Coding Test > Programmers_JavaScript' 카테고리의 다른 글

[JavaScript/프로그래머스] 그래프 - 순위  (0) 2023.05.16
[JavaScript/프로그래머스] 그래프 - 가장 먼 노드  (0) 2023.05.16
[JavaScript/프로그래머스] 연습문제 - 덧칠하기  (0) 2023.05.09
[JavaScript/프로그래머스] 연습문제 - 기사단원의 무기  (0) 2023.05.09
[JavaScript/프로그래머스] 연습문제 - 카드 뭉치  (0) 2023.05.08
'Coding Test/Programmers_JavaScript' 카테고리의 다른 글
  • [JavaScript/프로그래머스] 그래프 - 순위
  • [JavaScript/프로그래머스] 그래프 - 가장 먼 노드
  • [JavaScript/프로그래머스] 연습문제 - 덧칠하기
  • [JavaScript/프로그래머스] 연습문제 - 기사단원의 무기
ThreeLight
ThreeLight
ThreeLight Studio의 블로그, TimeMap.exe에 오신 것을 환영합니다.
  • ThreeLight
    TimeMap.exe
    ThreeLight
  • 전체
    오늘
    어제
    • 분류 전체보기 (245)
      • Checkpoint (1)
      • (3D)Dev Deep Dive (0)
        • Templates & Guides (9)
        • Frontend origin (9)
        • Backend origin (1)
        • TroubleShootings (4)
      • Development Study (95)
        • Frontend (36)
        • Backend (21)
        • CS(Computer Science) (2)
        • Background Knowledges (11)
        • Algorithm (2)
        • Mobile (3)
        • AWS (6)
        • Python (6)
        • MSW(MapleStoryWorlds) (8)
      • Coding Test (59)
        • 문제.zip (1)
        • BaekJoon_JavaScript (0)
        • Programmers_JavaScript (9)
        • BaekJoon_Python (23)
        • Programmers_Python (10)
        • Undefined_Python (3)
        • Programmers_SQL (13)
      • 활동내역.zip (43)
        • 개인 (21)
        • Techeer (12)
        • Bootcamp (7)
        • Hackathon (1)
        • TeamProjects (2)
      • 여기 괜찮네??(사이트 | App) (5)
      • 재미있는 주제들 (8)
      • 개발 외 공부 저장소 (11)
        • 생산운영관리 (3)
        • 생활속의금융 (6)
        • 경영정보시스템 (2)
  • 링크

    • TimeMap.dmg (Portfolio)
    • GitHub 바로가기
    • 오픈프로필(카카오톡)
    • Medium 바로가기
    • Disquiet 바로가기
    • LinkedIn 바로가기
  • 인기 글

  • 태그

    Python
    react
    HTML
    Baek Joon
    프로그래머스
    programmers
    JavaScript
    SQL
    CSS
    TypeScript
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
ThreeLight
[JavaScript/프로그래머스] 그래프 - 방의 개수
상단으로

티스토리툴바