코린이의 소소한 공부노트

[LeetCode/Easy] 1018. Binary Prefix Divisible By 5 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 1018. Binary Prefix Divisible By 5

무지맘 2023. 6. 7. 19:25

1. Input

1) int[] nums

 

2. Output

1) 다음과 같은 방법으로 만든 논리형 리스트를 반환

- nums의 앞에서부터 i번째까지 숫자를 1개씩 이어붙여서 만든 2진수 n10진수로 바꾼다.

- 그 숫자가 5의 배수이면 리스트의 i번째에 true, 아니면 false를 담는다.

 

3. Constraint

1) 1 <= nums.length <= 10^5

2) nums에는 01 뿐이다.

 

4. Example

Input: nums = [0,1,1] -> Output: [true,false,false]

설명:

- i=0: n=0 -> 10진수=0 -> 5의 배수이므로 true

- i=1: n=01 -> 10진수=1 -> 5의 배수가 아니므로 false

- i=2 : n=011 -> 10진수=3 -> 5의 배수가 아니므로 false

 

5. Code

1) 첫 코드(2023/06/07)

class Solution {
    public List<Boolean> prefixesDivBy5(int[] nums) {
        List<Boolean> ans = new ArrayList<Boolean>();
        StringBuilder sb = new StringBuilder();
        for(int i=0 ; i<nums.length ; i++){
            int n = Integer.valueOf(sb.append(nums[i]).toString(),2);
            ans.add(n%5==0);
        }
        return ans;
    }
}

- nums가 너무 길어서 numberformat exception이 발생

 

2) 힌트를 참고해서 다시 푼 코드(2023/06/07)

class Solution {
    public List<Boolean> prefixesDivBy5(int[] nums) {
        List<Boolean> ans = new ArrayList<Boolean>();
        int n = 0;
        for(int i=0 ; i<nums.length ; i++){
            n = (n*2 + nums[i])%10;
            ans.add(n%5==0);
        }
        return ans;
    }
}

- 78%, 6%