해당 문제는 leetcode에서 가져왔습니다:
https://leetcode.com/problems/summary-ranges/
문제 분석
해당 문제는 말그대로 숫자들의 배열인 nums를 압축해서 표현하는 문제입니다.
예제 1에서 [0,1,2,4,5,7]이라는 input이 들어오면
0, 1, 2 => [0, 2]
4, 5 => [4, 5]
7 => [7]
로 표현하라고 합니다.
저는 이 문제에 접근하기 위해서 커서를 비치하여 연이어서 오는 숫자인지를 파악해주어야 한다고 생각했습니다. 때문에 curr_start와 curr_end를 만들어서 현재 보고있는 시점의 시작지점과 끝지점을 저장했습니다.
#define MINRANGE -(2147483648-1)
#define ll long long
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
vector<string> answer ;
ll curr_start = MINRANGE ;
ll curr_end = MINRANGE ;
for(auto num : nums){
if(curr_end+1 == num){
curr_end += 1 ;
}
else{
if(curr_start != MINRANGE){
if(curr_start == curr_end)
answer.push_back(to_string(curr_start)) ;
else
answer.push_back(to_string(curr_start)+"->"+to_string(curr_end)) ;
}
curr_start = num ;
curr_end = num ;
}
}
if(curr_start != MINRANGE){
if(curr_start == curr_end)
answer.push_back(to_string(curr_start)) ;
else
answer.push_back(to_string(curr_start)+"->"+to_string(curr_end)) ;
}
return answer ;
}
};
별다른 문제없이 통과할 수 있었습니다. 다만 ${-2^31 <= nums[i] <= 2^31-1}$이라는 숫자 크기때문에 int대신에 long long을 사용해주었습니다.
해당 문제는 Github에서도 보실 수 있습니다.
https://github.com/gurcks8989/CodingTest/blob/master/LeetCode/P228_Summary_Ranges.cpp
훈수 및 조언은 언제든 환영입니다:)