-
프로그래머스 - 과제 진행하기 [Java]문제 풀이/프로그래머스 2024. 2. 19. 16:56반응형
이 문제는 자료구조를 이용한 문제이다.
처음에는 00:00부터 23:59를 분으로 바꾸어 0 ~ 1339 까지 루프를 돌려 문제를 풀었으나, 계속 오답이 나왔다.
그래서 자료 구조를 사용하여 문제를 풀었고, 정답을 맞출 수 있었다.
import java.util.*; import java.io.*; class Solution { static final int MAX = 2000; Stack<Node> stopped = new Stack<>(); Queue<Node> tasks = new LinkedList<>(); public String[] solution(String[][] plans) { List<Node> temp = new ArrayList<>(); for (final String[] plan : plans) { final String name = plan[0]; final int start = timeToInt(plan[1]); final int playTime = Integer.parseInt(plan[2]); temp.add(new Node(name, start, playTime)); } Collections.sort(temp, (o1, o2) -> { if (o1.start < o2.start) { return -1; } return 1; }); temp.stream().forEach(e -> { tasks.add(e); }); final String[] answer = solve(); return answer; } String[] solve() { List<String> results = new ArrayList<>(); while (!tasks.isEmpty()) { final Node present = tasks.poll(); // isLast if (tasks.isEmpty()) { results.add(present.name); break; } final Node next = tasks.peek(); int distance = next.start - present.start; final int presentDist = present.playTime; if (distance == presentDist) { results.add(present.name); } else if (distance < presentDist) { present.playTime -= distance; stopped.push(present); } else { stopped.push(present); while (!stopped.isEmpty() && distance > 0) { final Node temp = stopped.pop(); if (distance < temp.playTime) { temp.playTime -= distance; stopped.push(temp); break; } else if (distance == temp.playTime) { results.add(temp.name); break; } else { results.add(temp.name); distance -= temp.playTime; } } } } while (!stopped.isEmpty()) { final Node temp = stopped.pop(); results.add(temp.name); } return results.toArray(String[]::new); } int timeToInt(final String time) { StringTokenizer st = new StringTokenizer(time, ":"); final int hour = Integer.parseInt(st.nextToken()); final int minute = Integer.parseInt(st.nextToken()); return hour * 60 + minute; } static class Node { String name; int start; int playTime; Node(String name, int start, int playTime) { this.name = name; this.start = start; this.playTime = playTime; } } }
반응형'문제 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 숫자 블록 [Java] (0) 2024.02.22 프로그래머스 - 후보키 [Java] (0) 2024.02.19 프로그래머스 - N-Queen [Java] (1) 2024.02.12 프로그래머스 - 문자열 압축 [Java] (2) 2024.02.11 프로그래머스 - 기둥과 보 설치 [Java] (1) 2024.02.10