728x90
문제
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)
'JAVA > Coding Test Study' 카테고리의 다른 글
[Easy] LeetCode - no.141 Linked List Cycle : Java (0) | 2024.10.21 |
---|---|
[Easy] LeetCode - no.20 Valid Parentheses : Java (0) | 2024.10.19 |
[Easy] LeetCode - no.219 Contains Duplicate II : Java (0) | 2024.10.17 |
[Easy] LeetCode - no.202 Happy Number : Java (0) | 2024.10.17 |
[Easy] LeetCode - no.1 Two Sum : Java (0) | 2024.10.17 |