Summary Ranges

zoovely·2024년 6월 5일
0
post-thumbnail

💬 문제

[문제 링크]

중복 없이 정렬된 정수배열 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%까지 오르는 걸 보니 대부분 같은 값이 나오는 것 같다. 이 정도면 평균인 편.

profile
나도 할 수 있을까?

0개의 댓글