상세 컨텐츠

본문 제목

[Level2.] 호텔 대실 C++

C++/Programmers

by J2on 2024. 3. 1. 21:43

본문

<< 문제 >> 

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

 

프로그래머스

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

programmers.co.kr

 

핵심적인 개념은 "같은시간 내에 몇 개의 방을 사용하는가?" 입니다.

 

그래서 시간에 따라 정렬하고 입장은 + 퇴장은 - 를 통해 이 값이 최대가 되는 경우가 답입니다.

 

저는 15:00 -> 900 이렇게 분 단위로 전환해서 입/퇴장 여부를 pair에 담고 vector로 묶어 정렬했습니다.

 

그냥 map을 쓰면 되는거 아니냐 하실 수 있는데,,, map은 중복을 허용하지 않기 때문에 그렇습니다.

multimap을 쓸 수도 있지만 그냥 vector를 활용하는게 더 직관적이라 그렇게 했습니다. 

 

<< 코드 >>

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int solution(vector<vector<string>> book_time) {
    int answer = 0;
    
    vector<pair<int, string>> timeStamps;
    
    int min;
    for(auto& time : book_time){
        pair<int, string> timeStamp;
        for(int i=0; i<2; i++){
            min = 0;
            min += stoi(time[i].substr(0,2)) * 60;
            min += stoi(time[i].substr(3,2)); 
            
            if(i == 0){ // 입장시간
                timeStamp.first = min;
                timeStamp.second = "입장";
            }
            else{
                timeStamp.first = min + 9; // 청소시간까지 고려
                timeStamp.second = "퇴장"; 
            }
            
            timeStamps.push_back(timeStamp);
        }
    }
    
    sort(timeStamps.begin(), timeStamps.end());
    
    int usingRoom = 0;
    for(auto& p : timeStamps){
        if(p.second == "입장"){
            usingRoom++;
        }
        else if(p.second == "퇴장"){
            usingRoom--;
        }
        
        if(usingRoom > answer){
            answer = usingRoom;
        }
    }
    
    return answer;
}

 

<< 깃허브 >>

https://github.com/J2on/StudyAlgorithm_Part2/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/2/155651.%E2%80%85%ED%98%B8%ED%85%94%E2%80%85%EB%8C%80%EC%8B%A4

 

'C++ > Programmers' 카테고리의 다른 글

[Level2.] 할인 행사 C++  (0) 2024.03.02
[Level1.] 둘만의 암호 C++  (0) 2024.03.01
[Level2.] 튜플 C++  (0) 2024.02.22
[Level2.] 숫자 변환하기 C++  (0) 2024.02.18
[Level1.] 예산 C++  (0) 2024.02.15

관련글 더보기

댓글 영역