[프로그래머스/C++] 호텔 대실

Hanbi·2023년 2월 15일
0

Problem Solving

목록 보기
56/128
post-thumbnail
post-custom-banner

문제

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

풀이

시, 분으로 2차원 배열 만들어서 해당 예약 시간 배열에 +1 해주고, 배열에서 최댓값 찾는 방법으로 풂!

9번, 17번 테케만 계속 실패해서 의문이었는데 청소 시간 10분 더했을 때 분이 59를 넘어가는 경우, 시/분을 변경해줘야 하는 것이였음

근데, 시/분 변경할 때 (시간+1) 해주니까 자꾸 core dump가 떴다. 문제에서 예약시간이 자정을 넘어가는 경우가 없다고 해서 배열 [24][60]으로 한 건데 [25][61]로 해야 해결됐다. 이건 살짝 의문...

코드

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int arr[25][61];

int solution(vector<vector<string>> book_time) {
    int answer = 0;
    
    for(int i=0; i<book_time.size(); i++) {
        int sh = stoi(book_time[i][0].substr(0, 2));
        int sm = stoi(book_time[i][0].substr(3, 2));
        int fh = stoi(book_time[i][1].substr(0, 2));
        int fm = stoi(book_time[i][1].substr(3, 2));
        fm += 10;
        
        if(fm > 59) {
            fh++;
            fm -= 60;
        }
        
        for(int j=sh; j<=fh; j++) {
            for(int k=0; k<60; k++) {
                if(j == sh) {
                    if(k < sm)
                        continue;
                    
                }
                if(j == fh) {
                    if(k >= fm)
                        break;
                    
                }
                arr[j][k]++;
            }
        }
    }
    
    for(int i=0; i<24; i++) {
        for(int j=0; j<60; j++) {
            if(arr[i][j] > answer)
                answer = arr[i][j];
        }
    }
    
    return answer;
}
profile
👩🏻‍💻
post-custom-banner

0개의 댓글