중복 없이 정렬된 정수배열 nums
연속되어 있는 숫자는 "시작->끝"
연속되지 않은 숫자는 "숫자"
규칙에 맞게 문자열을 담은 배열 반환
Input: nums = [0,1,2,4,5,7]
Output: ["0->2","4->5","7"]
/**
* @param {number[]} nums
* @return {string[]}
*/
var summaryRanges = function(nums) {
let res = [];
let start = 0;
for (let i = 1; i <= nums.length; i++) {
if (nums[i] === nums[i - 1] + 1)
continue ;
start === i - 1 ? res.push(`${nums[start]}`) :
res.push(`${nums[start]}->${nums[i - 1]}`);
start = i;
}
return res;
};
두번째 인덱스부터 시작하여
이전 값 + 1한 것이 현재 인덱스 값과 같다면 넘어감
그렇지 않을 경우 배열에 문자열을 넣을 건데,
연속의 시작인 인덱스(start)가 이전 인덱스면(=이어진 것이 하나도 없었음)
숫자만 있는 문자열을 넣고
반대의 경우에는 시작부터 이전 인덱스까지 화살표로 표현한 문자열 추가
다시 시작 인덱스를 지금으로 바꾸고 넘어감
마지막 인덱스까지 확인해야하므로 for문 조건값은 i <= nums.length
Accepted
Runtime 39ms (Beats 96.88%)
Memory 48.98MB (Beats 15.46%)
알고리즘 자체는 빨리 생각해냈는데 문자열 만들 때 변수를 넣는 방법을 순간 까먹어서 검색했다. 창피하다... 이제는 잊지말자 백틱 안에 ${변수}
로 사용하기. 그리고 결과 중 메모리 Beats가 낮아서 확인해 봤는데 0.3 차이로 50%까지 오르는 걸 보니 대부분 같은 값이 나오는 것 같다. 이 정도면 평균인 편.