ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자바(JAVA)] 중복된 숫자 개수, 짝수 홀수 개수, 배열 자르기(Arrays.copyOfRange() ), 최댓값 만들기(Arrays.sort)
    프로그래머스/자바(JAVA) 2023. 5. 26. 04:16
    728x90

    1. 중복된 숫자 개수

     

    class Solution {
        public int solution(int[] array, int n) {
            int count = 0;
            
            for(int i=0; i< array.length; i++){
                if(array[i] == n) count++;                
            }
            return count;
        }
    }

     

    // 다른풀이
    
    class Solution {
        public int solution(int[] array, int n) {
            int count = 0;
            
            for(int num: array){
                if(num == n) count++;                
            }
            return count;
        }
    }

     

     

    2. 짝수 홀수 개수

    // 내 풀이
    
    class Solution {
        public int[] solution(int[] num_list) {
            int even = 0, odd = 0;
            int[] answer = new int[2];
            
            for (int i=0; i< num_list.length; i++){
                if(num_list[i] % 2 == 0) {
                    even++;
                }
                else odd++; 
                answer[0] = even;
                answer[1] = odd;
            }
            return answer;
        }
    }

     

     

    ✅ 1. 다른풀이 (코드 간결화)

    // 1. 다른풀이 (코드 간결화)
    
    class Solution {
        public int[] solution(int[] num_list) {
            int[] answer = new int[2];
    
            for(int i = 0 ; i < num_list.length ; i++){
                if(num_list[i]%2==0){
                    answer[0]++;
                }else{
                    answer[1]++;
                }
            }
    
            return answer;
        }
    }

     

    📄 내 코드보다 깔끔한 이유 ❓
    : 출력값이 [짝수, 홀수]로 나오기 때문에 굳이 변수를 선언하는게 아니라 if문에 맞춰서 answer[0], [1]값을 바로 카운팅하면 된다.

     

     

    ✅ 2. 다른풀이

    class Solution {
        public int[] solution(int[] num_list) {
            int[] answer = new int[2];
    
            for(int i = 0; i < num_list.length; i++)
                answer[num_list[i] % 2]++;
    
            return answer;
        }
    }

    📄 풀이)

    num_list = {1, 2, 3, 4, 5}; 일때
    num_list[0] % 2 = 1;
    num_list[1] % 2 = 0;
    num_list[2] % 2 = 1;
    num_list[3] % 2 = 0;
    num_list[4] % 2 = 1;
    
    answer[1]++;
    answer[0]++;
    answer[1]++;
    answer[0]++;
    answer[1]++;
    
    // 결과값 형태: [짝수의 개수, 홀수의 개수]
    // 짝수 = 나머지가 0임 = answer의 0번째 인덱스에 카운팅됨
    
    // 즉, answer[num_list[i] % 2]++; 코드로 짝수 or 홀수 판별 후 카운팅까지 가능함

     

     

     

    3. 배열 자르기

     

    class Solution {
        public int[] solution(int[] numbers, int num1, int num2) {
            int index = 0;
            int[] answer = new int[num2 - num1 + 1];     // 배열의 크기 지정
    
            for (int i = num1; i <= num2; i++) {
                answer[index] = numbers[i];				// 여기서 값을 받기 위해 새로운 배열을 생성했음
                index++;								
      
            }
            return answer;
        }
    }

     

     

    ✅ 다른풀이(1) (코드 간결화)

    class Solution {
        public int[] solution(int[] numbers, int num1, int num2) {
            int[] answer = new int[num2 - num1 + 1];
    
            for (int i = num1; i <= num2; i++) {
                answer[i -num1] = numbers[i];
            }
    
            return answer;
        }
    }

     

     

    ✅ 다른풀이(2) 

    import java.util.*;
    
    class Solution {
        public int[] solution(int[] numbers, int num1, int num2) {
            return Arrays.copyOfRange(numbers, num1, num2 + 1);
        }
    }

    📌 copyOfRange()

    java.util.Arrays.copyOfRange() 메서드는 Java에서 배열의 특정 구간을 복사하여 새로운 배열을 생성하는 기능을 제공하는 메서드이다.

    public static T[] copyOfRange(T[] original, int from, int to)
    • original: 복사할 원본 배열
    • from: 복사할 구간의 시작 인덱스 (포함)
    • to: 복사할 구간의 끝 인덱스 (포함하지 않음)

    => original 배열에서 from 인덱스부터 to 인덱스까지의 구간을 새로운 배열로 복사하여 반환하며, 반환되는 배열의 길이는 (to - from)

    이다.from = 이상 ( from(인덱스 값) <= x)to = 미만( x < to(인덱스 값))

     

     

     

     

     

    4. 배열 원소의 길이

     

    class Solution {
        public int[] solution(String[] strlist) {
            int[] answer = new int [strlist.length];  // 배열생성, 길이=stelist배열의 길이
            
            for(int i=0; i<strlist.length; i++) {
                answer[i] = strlist[i].length();
            }
            return answer;
        }
    }

     

     

     

    5. 배열 뒤집기

    class Solution {
        public int[] solution(int[] num_list) {
            int[] answer = new int [num_list.length];
            int idx = 0;
            
            for(int i = num_list.length - 1; i >=0; i--) {
                answer[idx] = num_list[i];
                idx++;
            }
            return answer;
        }
    }

     

     

    ✅ 다른풀이 (코드간결화)

    class Solution {
        public int[] solution(int[] num_list) {
            int[] answer = new int[num_list.length];
            for(int i = 0; i< num_list.length; i++){
                answer[i] = num_list[num_list.length-i-1];
            }
            return answer;
        }
    }

     

    int idx 변수를 생성하지 않고 반복문으로 돌리는대신 
    원본 배열의 인덱스값을 거꾸로 진행함

    answer[i] = num_list[num_list.length-i-1];

     

     

     

     

    6. 최댓값 만들기 (1)

     

     

    import java.util.Arrays;
    
    class Solution {
        public int solution(int[] numbers) {
            Arrays.sort(numbers);               // 오름차순 정렬 후 
            return numbers[numbers.length-1] * numbers[numbers.length-2];  // 인덱스값으로 곱하기
        }
    }

     

     

     

    📌  sort()
    java.util.Arrays 클래스에는 배열을 정렬하는 데 사용할 수 있는 sort() 메서드가 있다.

    이 메서드를 사용하면 배열의 요소를 오름차순으로 정렬할 수 있다.

     

    public static void sort(int[] a)  // a : 정렬하려는 배열

     

    ✅ sort() 예시코드

    import java.util.Arrays;
    
    public class Main {
        public static void main(String[] args) {
            int[] array = {5, 2, 8, 1, 6};
    
            Arrays.sort(array); 			// array를 오름차순으로 정렬함
    
            // 정렬된 배열 출력       		
            System.out.print(Arrays.toString(array));      
        }
    }
    
    // 출력값 : [1, 2, 5, 6, 8]

     

     

    728x90
Designed by Tistory.