반응형
시계의 분 차이를 계산하는 구현문제였습니다.
📕 풀이방법
📔 입력 및 초기화
1. 각 timePoint를 분으로 환산한 vector minutes를 선언 후 해당 문자열로 분으로 환산하는 getTotalMinute를 timePoints별로 수행해 minutes에 저장합니다2. minutes를 오름차순으로 정렬해줍니다. 이로써 이웃한 시간간의 차이가 최소화 됩니다. 3. 정답 변수 minDiff를 선언 후 int max값으로 저장합니다.(약 10억)
📔 풀이과정
1. minutes의 원소를 돌며 다음을 수행합니다. 1-1. minDiff에 minutes의 이웃 원소간의 최소를 구해줍니다.2. minutes의 첫 번째 원소는 현재 날로부터 지난 분으로 계산될 수도 있으나 다음 날로부터 지난 시간으로도 계산 될 수 있습니다. 따라서 다음 날로부터 minutes[0]만큼 지난 값을 nextDay에 저장해주고 nextDay - 현재날의 마지막 분값을 지역변수 circularDiff에 저장해 minDiff와의 최솟값을 갱신해줍니다.
📔 정답 출력 | 반환
minDiff를 반환합니다.
📕 Code
📔 C++
class Solution {
public:
int getTotalMinute(string timePoint) {
int time = stoi(timePoint.substr(0,2));
int minute = stoi(timePoint.substr(3));
int totalMinute = time * 60 + minute;
return totalMinute;
}
int findMinDifference(vector<string>& timePoints) {
vector <int> minutes;
for(auto t : timePoints) {
minutes.push_back(getTotalMinute(t));
}
sort(minutes.begin(), minutes.end());
for(auto m : minutes) cout << m << ' ';
int minDiff = 0x3f3f3f3f;
for (int i = 1; i < minutes.size(); ++i) {
minDiff = min(minDiff, minutes[i] - minutes[i - 1]);
}
int nextDay = 1440 + minutes[0];
int circularDiff = (nextDay - minutes.back());
minDiff = min(minDiff, circularDiff);
return minDiff;
}
};
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.