Algorithms/Programmers

[Programmers] 튜브의 소개팅

징토리 2023. 10. 24. 15:44

⬇️ 문제 링크입니다.

https://school.programmers.co.kr/learn/courses/30/lessons/1839

 

프로그래머스

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

programmers.co.kr

문제 조건

  • m : time_map 의 행
  • n : time_map 의 열
  • s : 튜브가 대화 할 수 있는 시간 
    범위는 1 <= s <= 2^31-1
  • time_map 파티장을 표현한 2차원 int 배열
    배열의 원소값 범위는 -1 <= s <= 2^31-1 
  • (0,0)에서 출발하여 (m-1, n-1)까지 도달하는데 있어 가장 짧은 경로, 경로가 같다면  S의 값이 적은 값을 찾아보자

문제 풀이

  1. 이동거리, 걸린 시간, 좌표x, 좌표y 값을 담을 수 있는 class 설정
  2. 파티장까지 이동하는 짧은 경로를 계속 체크할 2차원 int 배열 생성
  3. (0,0)을 시작으로 time_map 범위에 포함되는 주변을 탐색
  4. 만약 time_map[dirY][dirX]가 -1 (=테이블) 이면 패스
  5. 만약 경로체크용 2차원배열에 기록된 경로값보다 현재 값이 더 긴 경로를 가졌다면 패스
  6. 두 조건에 만족한다면 경로체크 2차원 배열에 현재 값을 기록
  7. 현재까지 걸린 시간과 현재 자리에서 걸릴 시간을 더한 값이 인내심 값 S 보다 작으면, 다음으로 이동할 수 있게 pq에 새로운 값을 저장
    ** 배열의 원소 값 범위가 INTEGER 범위에 근접하니 이 부분 계산 시 long 처리 해주기**