java

[LeetCode] Find Numbers with Even Number of Digits

게르마늄팔찌전도사 2024. 5. 1. 22:30

Given an array nums of integers, return how many of them contain an even number of digits.

 

Example 1:

Input: nums = [12,345,2,6,7896]
Output: 2
Explanation: 
12 contains 2 digits (even number of digits). 
345 contains 3 digits (odd number of digits). 
2 contains 1 digit (odd number of digits). 
6 contains 1 digit (odd number of digits). 
7896 contains 4 digits (even number of digits). 
Therefore only 12 and 7896 contain an even number of digits.

 

Example 2:

Input: nums = [555,901,482,1771]
Output: 1 
Explanation: 
Only 1771 contains an even number of digits.

 

import java.io.*;

class Solution {
    public int findNumbers(int[] nums) {
        int count = 0;
        for (int num : nums) {
            if (hasEvenDigits(num)) {
                count++;
            }
        }
        return count;
    }

    private boolean hasEvenDigits(int num) {
        String numStr = Integer.toString(num);
        return numStr.length() % 2 == 0;
    }
}

public class find_Numbers_with_Even_Number_of_Digits {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String[] input = br.readLine().split(" ");

        int[] nums = new int[input.length];

        for (int i = 0; i < input.length; i++) {
            nums[i] = Integer.parseInt(input[i].trim()); // 공백 제거 후 정수로 변환
        }

        Solution solution = new Solution();

        int result = solution.findNumbers(nums);
        System.out.println("Output: " + result);

        System.out.println("Explanation:");
        for (int num : nums) {
            String numStr = Integer.toString(num);
            String evenOrOdd = numStr.length() % 2 == 0 ? "even" : "odd";
            System.out.println(num + " contains " + numStr.length() + " digits (" + evenOrOdd + " number of digits).");

        }
    }
}

 

이 문제는 받아온 숫자길이를 짝수 홀수로 분류해주면 된다. 솔직히 처음에는 좀 많이 비효율적으로 생각했다. 10으로 나누어 10나눌때마다 count를 하고 count를 짝인지 홀인지 구분하는 코드로 만들어 코드가 많이 비효율적이였다. 사람들은 어떻게 짰나 보았는데 다들 함수를 여러개 써서 length를 이용해 짝홀을 만들었던 걸 보게되었다. 난 항상 코드를 비효율적으로 짜는 것 같다. 다음번부터는 좀 더 효율적으로 짜기 위해서 좀 더 고민하는 시간이 필요할 것 같다.

'java' 카테고리의 다른 글

[Leetcode] Duplicate Zeros  (0) 2024.05.07
[java] 11653번 소인수분해  (1) 2024.04.03
[java] 2581번 소수  (0) 2024.04.03
[java] 2745 진법  (0) 2024.03.28
[java] 11005 진법 변환2  (0) 2024.03.27