본문 바로가기

Java/Java 알고리즘 LeetCode

[LeetCode- Ch3. 배열] 6. 누락된 범위 # (+ 삼항 연산자)

반응형

https://www.lintcode.com/problem/641/

 

LintCode 炼码

 

www.lintcode.com

 

1. 예외처리 필수

2. 범위설정이 중요하다.

-> 처음 / 중간 /끝

 

//배열이 존재하지 않을 때
list.add(makeRange(lower, upper));

//처음
list.add(makeRange(lower,nums[0]-1));

//중간
list.add(makeRange(nums[i]+1, nums[i+1]-1));

//끝
list.add(makeRange(nums[n-1]+1,upper));

 

3. 삼항 연산자 사용한 범위 생성 메서드 작성

    private static String makeRange(int start, int end){
        //return start==end ? Integer.toString(start) : (start+"->"+end);
        return start==end? Integer.toString(start):(start+"->"+end);
    }

-> 조건 ? 참 : 거짓

 

int를 String으로 변환하는 메서드들

-> String.valueOf()

->Integer.toString()

 

 

public class Solution {
    public List<String> findMissingRanges(int[] nums, int lower, int upper) {
        //2개 이상 -> 로 표시
        //그 외엔 ", "로 하나씩 추가
        //예외처리 필수 -> 1개일 때 / 0개일 때 / 배열의 값이 같을 때
        //0개일 때, 1개일 때 -> upper와 lower가 같을 때, 같지 않을 때
        List<String> list = new ArrayList<>();
        int n=nums.length;

        //1. 배열이 존재하지 않거나, 배열의 길이가 0일 때 예외처리
        if(nums==null || n==0){
            list.add(makeRange(lower, upper));
            return list;
        }

        //2. lower, upper 처리
        //: 배열이 같을 때도 생각해야 한다.
        //-> 범위생성 메서드를 사용
        
        //lower처리
        if(nums[0]>lower){
            list.add(makeRange(lower,nums[0]-1));
        }


        //중간 처리
        for(int i=0;i<n-1;i++){
            //배열이 같은 경우 예외처리 && 다음 배열이 현재 배열 값과의 차이가 1이상일 경우만 
            if(nums[i]!=nums[i+1] && nums[i+1]>nums[i]+1)
            list.add(makeRange(nums[i]+1, nums[i+1]-1));
        }
        //upper 처리
        if(nums[n-1]<upper){
            list.add(makeRange(nums[n-1]+1,upper));
        }
        
        return list;
    }
    private static String makeRange(int start, int end){
        //return start==end ? Integer.toString(start) : (start+"->"+end);
        return start==end? Integer.toString(start):(start+"->"+end);
    }
}

public class Solution {
    public List<String> findMissingRanges(int[] nums, int lower, int upper) {
        //모든 요소를 포함하는 범위
        //정수 배열
        List<String> list = new ArrayList<>();
        int n=nums.length;
        //1. 예외처리
        if(nums==null || n==0){
            list.add(makeRange(lower, upper));
            return list;
        }

        //2. 처음, 중간, 끝 범위 설정
        if(lower<nums[0]){
            list.add(makeRange(lower, nums[0]-1));
        }
        for(int i=0; i<n-1;i++){
        //같을 경우와 하나 차이날 경우는 continue;
            if(nums[i]== nums[i+1]||nums[i]+1== nums[i+1]) continue;
            else list.add(makeRange(nums[i]+1, nums[i+1]-1));
        }
        if(upper>nums[n-1]){
            list.add(makeRange(nums[n-1]+1, upper));
        }
        return list;
    }
    //같으면 한개만, 다르면 범위로
    private String makeRange(int start, int upper){
       return lower==upper? Integer.toString(lower):(lower+"->"+upper);
    }
}
반응형