프로그래머스/자바(JAVA)

[자바(JAVA)] 중복된 숫자 개수, 짝수 홀수 개수, 배열 자르기(Arrays.copyOfRange() ), 최댓값 만들기(Arrays.sort)

xlxlxl7 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