반응형

문제출처

https://programmers.co.kr/learn/courses/30/lessons/17678

 

프로그래머스

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

programmers.co.kr

 

문제풀이

string 형태의 시간을 int형 분으로 변환하여 풀이했다. 변환한 벡터를 오름차순으로 정렬한 뒤 순차적으로 크루들을 탑승시킨다. 이때 마지막 버스인데 타지 못할 경우 마지막 탑승자보다 1분 빨리오는 예외처리가 필요하다. 

2번째 for문에서 탑승할 인원을 체크하고 예외 처리 이후 int형 분을 다시 string형 시간으로 변환하여 return해주면 되는 문제.

핵심은 주어진 문자열을 연산할 때 어떻게 처리하고 정렬을 이용하는 것 같다.

 

소스코드

https://github.com/sw93/algorithm/blob/master/Programmers/kakao2018%20-%20%EC%85%94%ED%8B%80%EB%B2%84%EC%8A%A4.cpp

 

sw93/algorithm

problem solve. Contribute to sw93/algorithm development by creating an account on GitHub.

github.com

#include <string>
#include <vector>
#include <algorithm>
using namespace std;
const int START_BUS_MINUTE = 9 * 60;
const int LAST_BUS_MINUTE = 24 * 60;
int getIntMinute(string time) {
    int ret = ((time[0]-'0')*10 + (time[1]-'0')) * 60;
    ret += (time[3]-'0')*10 + (time[4]-'0');
    return ret;
}
string getStringTime(int time) {
    string ret = to_string((time/600));
    ret += to_string((time/60)%10);
    ret +=  ':';
    ret += to_string((time%60)/10);
    ret += to_string((time%60)%10);
    return ret;
}
string solution(int n, int t, int m, vector<string> timetable) {
    string ret = "";
    vector<int> v;
    for (int i=0; i<timetable.size(); i++) v.push_back(getIntMinute(timetable[i]));
    sort(v.begin(), v.end());
    
    int boardCount = 0;
    int startTime = START_BUS_MINUTE;
    for (int i=0; i<n; i++) {

        // 문제 조건 23:59까지만 가능
    	if (startTime > LAST_BUS_MINUTE) break;
    	int maxBoardCount = m;
        
    	for (int j=boardCount; j<v.size(); j++) {
    		if (maxBoardCount == 0 || v[j] > startTime) break;
            boardCount++;
            maxBoardCount--;
    	}

        // 마지막 버스
    	if (i == n-1) {
            
          // 탑승할 자리가 없는 경우 1분 일찍 나옴
          if (maxBoardCount == 0) startTime = v[boardCount-1] - 1;  
    	}  else startTime += t;
    }
    ret = getStringTime(startTime);
    return ret;
}
반응형

+ Recent posts