[랜덤 마라톤] 주차 빌딩(3699)

lhs's avatar
Jan 01, 2025
[랜덤 마라톤] 주차 빌딩(3699)
notion image
notion image

1. 문제 풀이 아이디어

  • 엘리베이터는 항상 1층으로 이동하므로 출차 순서와 관계없이 계산이 가능하다.
  • 또한 각 층의 컨테이너 벨트 이동 시간을 따로 계산하여 문제를 해결할 수 있다.

2. 나의 정답 코드

public class Main { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); StringBuilder stringBuilder = new StringBuilder(); int t = Integer.parseInt(bufferedReader.readLine()); for (int i = 0; i < t; i++) { StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine()); int h = Integer.parseInt(stringTokenizer.nextToken()); int l = Integer.parseInt(stringTokenizer.nextToken()); int result = 0; for (int j = 0; j < h; j++) { stringTokenizer = new StringTokenizer(bufferedReader.readLine()); Map<Integer, Integer> map = new TreeMap<>(); for (int k = 0; k < l; k++) { int a = Integer.parseInt(stringTokenizer.nextToken()); if (a == -1) continue; result += 20 * j; map.put(a, k); } int prev = 0; for (int a : map.values()) { result += 5 * Math.min(Math.abs(a - prev), l - Math.abs(a - prev)); prev = a; } } stringBuilder.append(result).append('\n'); } System.out.print(stringBuilder); bufferedReader.close(); } }

3. 정리

  • 입력값을 처리할 때 차량이 있는 경우 20 * j를 더해 엘리베이터 이동시간을 계산하고, 트리맵에 출차 순서와 차량 위치를 저장한다.
  • 층의 입력을 모두 처리한 후, 출차 순서에 따라 이전 위치와 현재 위치를 계산하여 이동시간을 결과값에 추가한다.
  • 모든 층의 계산이 끝나면 최종 결과값을 출력하여 문제를 해결한다.
Share article

LHS's Study Space