Lv 2. 호텔 대실

2024. 8. 9. 14:12·Algorithm & Data Structures/Programers
목차
  1. 코드 흐름

 

코드 흐름

  • ArrayList<> 를 방의 갯수로 잡고
  • String[][] book_time으로 들어오는 book_time[][0] 과 book_time[][1] 이 호텔 예약 시작과 끝시간 이라는것을 알아야 한다.
  • Arrays.sort()를 하였을때 String을 비교할 수 있는 compare함수를 Override 해주어야 하고
  • String 형태의 예약시간을 1440 까지 분단위로 존재하는 Integer 형태로 바꾸어 주었다. 바꿈과 동시에 10분을 끝시간에 더하여 호텔의 정비시간을 잡았다.
  • 이 코드안에서 놓치기 쉬운 두가지 포인트는 Collections.sort로 rooms 의 리스트들을 오름차순으로 정렬하여 가장 오랬동안 쓰이지 않은 방을 먼저 분배하는것과
  • 분배되고나서 break 문을 실행하여야 한다는 것이다.
import java.util.*;

class Solution {
    public int solution(String[][] book_time) {
        int answer = 0;
        Arrays.sort(book_time, new Comparator<String[]>(){
            @Override
            public int compare(String[] o1, String[] o2){
                if(o1[0].equals(o2[0]))
                    return o1[1].compareTo(o2[1]);
                else
                    return o1[0].compareTo(o2[0]);
            }
        });
        int[][] time = new int[book_time.length][2];
        int i = 0;
        ArrayList<Integer> rooms = new ArrayList<>();
        for(String[] o : book_time){
            Collections.sort(rooms);
            String[] start = o[0].split(":");
            String[] end = o[1].split(":");
            time[i][0] = (Integer.parseInt(start[0])*60)+Integer.parseInt(start[1]);
            time[i][1] = (Integer.parseInt(end[0])*60)+Integer.parseInt(end[1])+10;
            boolean isAdded = false;
            for(int j = 0; j<rooms.size(); j++){
                if(rooms.get(j) <= time[i][0]){
                    rooms.set(j,time[i][1]);
                    isAdded = true;
                    break;
                }
            }
            if(!isAdded){
                rooms.add(time[i][1]);
            }
            i++;
        }
        return rooms.size();
    }
}

'Algorithm & Data Structures > Programers' 카테고리의 다른 글

Lv 2. 숫자 카드 나누기  (0) 2024.08.12
Lv 2. 메뉴 리뉴얼  (0) 2024.08.11
Lv 2. 시소 짝궁  (0) 2024.08.08
Lv 2. 마법의 엘리베이터  (1) 2024.08.06
Lv 2. 연속된 부분수열의 합  (0) 2024.08.04
  1. 코드 흐름
'Algorithm & Data Structures/Programers' 카테고리의 다른 글
  • Lv 2. 숫자 카드 나누기
  • Lv 2. 메뉴 리뉴얼
  • Lv 2. 시소 짝궁
  • Lv 2. 마법의 엘리베이터
Geisha
Geisha
개발 일기
  • Geisha
    Geisha
    Geisha
  • 전체
    오늘
    어제
    • 분류 전체보기 (316)
      • Algorithm & Data Structures (238)
        • BOJ (96)
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (25)
        • SQL (19)
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • 운영체제 (13)
        • 네트워크 (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    dp
    baekjoon
    후위순회
    알고리즘
    SQL
    골드
    DynamicProgramming
    동적계획법
    PriorityQueue
    백트래킹
    다익스트라
    스택
    프로그래머스
    Java
    백준
    이분탐색
    Stack
    유니온파인드
    경로압축
    전위순회
    구현
    Dijkstra
    Union-Find
    unionfind
    dfs
    BFS
    algorithm
    programmers
    binarySearch
    투포인터
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Geisha
Lv 2. 호텔 대실
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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