본문 바로가기
JAVA/Coding Test Study

[Easy] LeetCode - no.228 Summary Ranges : Java

by ♡˖GYURI˖♡ 2024. 10. 19.
728x90

https://leetcode.com/problems/summary-ranges/description/?envType=study-plan-v2&envId=top-interview-150

 

 

문제

int 배열 nums가 주어졌을 때, 연속되는 숫자의 범위들을 String 리스트로 반환할 것

Example 1:
Input: nums = [0,1,2,4,5,7]
Output: ["0->2","4->5","7"]
Explanation: The ranges are:
[0,2] --> "0->2"
[4,5] --> "4->5"
[7,7] --> "7"

Example 2:
Input: nums = [0,2,3,4,6,8,9]
Output: ["0","2->4","6","8->9"]
Explanation: The ranges are:
[0,0] --> "0"
[2,4] --> "2->4"
[6,6] --> "6"
[8,9] --> "8->9"

 

 

 

풀이

    public static List<String> summaryRanges(int[] nums) {
        List<String> list = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            int start = nums[i];
            int end = nums[i];
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[j] == end + 1) {
                    end = nums[j];
                    i = j;
                } else {
                    break;
                }
            }
            if (start == end) {
                list.add("" + start);
            } else {
                list.add("" + start + "->" + end);
            }
        }
        return list;
    }
  • 이중 for문 사용
    • 첫번째 for문에서 start와 end 선언
    • 두번째 for문에서 인덱스 i 이후의 값들이 연속인지 판단
      • 연속이라면 end를 nums[j]로 업데이트, i도 j로 업데이트
      • 연속이 아니라면 멈춤
    • 이렇게 구한 start와 end가 서로 같다면 연속된 범위가 1자리라는 의미이니 start 값만 list.add()
    • 서로 다르다면 연속된 범위가 2자리 이상이라는 의미이니 start → end를 list.add()
  • 시간복잡도 : O(N)