์ฝ”๋”ฉํ…Œ์ŠคํŠธ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

Day 20. ์ฝ”๋”ฉ ๊ธฐ์ดˆ ํŠธ๋ ˆ์ด๋‹(Java)

KASSIA 2024. 3. 1. 23:19

1. ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์œผ๋กœ ๋งŒ๋“ค๊ธฐ

https://school.programmers.co.kr/learn/courses/30/lessons/181857

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

โ–ผ ๋ฐฉ๋ฒ• 1

class Solution {
    public int[] solution(int[] arr) {
        int[] answer = {};
        int temp = 1;
        
        while(temp < arr.length) {
            temp *= 2;
        }
        
        answer = new int[temp];
        
        for(int i = 0; i < arr.length; i++) {
            answer[i] = arr[i];
        }
        
        return answer;
    }
}

 

โ–ผ ๋ฐฉ๋ฒ• 2

import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr) {
        int[] answer = {};
        int temp = 1;
        
        while(temp < arr.length) {
            temp *= 2;
        }
        
        answer = Arrays.copyOf(arr, temp);
        
        return answer;
    }
}

 

โ–ผ ๋ฐฉ๋ฒ• 3

import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr) {
        int[] answer = {};
        
        answer = Arrays.copyOf(arr, (int) Math.pow(2, Math.ceil(Math.log(arr.length) / Math.log(2))));
        
        return answer;
    }
}
๋กœ๊ทธ ๊ณ„์‚ฐ : ์˜ˆ๋ฅผ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
log(8) / log(2) = log(2³) / log(2) = 3log(2) / log(2) = 3

 

2. ๋ฐฐ์—ด ๋น„๊ตํ•˜๊ธฐ

https://school.programmers.co.kr/learn/courses/30/lessons/181856

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

โ–ผ ๋ฐฉ๋ฒ• 1

class Solution {
    public int solution(int[] arr1, int[] arr2) {
        int answer = 0;
        int arr1Sum = 0;
        int arr2Sum = 0;
        
        if(arr1.length < arr2.length) {
            answer = -1;
        } else if(arr1.length > arr2.length) {
            answer = 1;
        } else {
            for(int i = 0; i < arr1.length; i++) {
                arr1Sum += arr1[i];
                arr2Sum += arr2[i];
            }
            
            answer = arr1Sum < arr2Sum ? -1 : arr1Sum > arr2Sum ? 1 : 0;
        }
        
        return answer;
    }
}

 

โ–ผ ๋ฐฉ๋ฒ• 2

import java.util.Arrays;

class Solution {
    public int solution(int[] arr1, int[] arr2) {
        int answer = 0;
        int arr1Sum = 0;
        int arr2Sum = 0;
        
        if(arr1.length < arr2.length) {
            answer = -1;
        } else if(arr1.length > arr2.length) {
            answer = 1;
        } else {
            arr1Sum = Arrays.stream(arr1).sum();
            arr2Sum = Arrays.stream(arr2).sum();
            
            answer = arr1Sum < arr2Sum ? -1 : arr1Sum > arr2Sum ? 1 : 0;
        }
        
        return answer;
    }
}

 

โ–ผ ๋ฐฉ๋ฒ• 3

import java.util.stream.IntStream;

class Solution {
    public int solution(int[] arr1, int[] arr2) {
        int answer = Integer.compare(arr1.length, arr2.length);
        
        if(answer == 0) {
            answer = Integer.compare(IntStream.of(arr1).sum(), IntStream.of(arr2).sum());
        }
        
        return answer;
    }
}
Integer.compare(int x, int y)
(1) x == y ์ผ ๊ฒฝ์šฐ 0 ๋ฆฌํ„ด
(2) x < y   ์ผ ๊ฒฝ์šฐ ์Œ์ˆ˜ ๋ฆฌํ„ด
(3) x > y   ์ผ ๊ฒฝ์šฐ ์–‘์ˆ˜ ๋ฆฌํ„ด

 

3. ๋ฌธ์ž์—ด ๋ฌถ๊ธฐ

https://school.programmers.co.kr/learn/courses/30/lessons/181855

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

โ–ผ ๋ฐฉ๋ฒ• 1

import java.util.stream.IntStream;

class Solution {
    public int solution(String[] strArr) {
        int answer = 0;
        int[] strArrLength = new int[30];
        
        for(String str : strArr) {
            strArrLength[str.length() - 1]++;
        }
        
        for(int i = 0; i < strArrLength.length; i++) {
            answer = Math.max(answer, strArrLength[i]);
        }
        
        return answer;
    }
}

 

โ–ผ ๋ฐฉ๋ฒ• 2

import java.util.Arrays;
import java.util.stream.Collectors;

class Solution {
    public int solution(String[] strArr) {
        int answer = 0;
        
        answer = Arrays.stream(strArr).collect(Collectors.groupingBy(String::length, Collectors.counting())).values().stream().mapToInt(Math::toIntExact).max().orElse(0);
        
        return answer;
    }
}
toIntExact()
Java 8์—์„œ ์ถ”๊ฐ€๋œ ์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ์ด๋‹ค. ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋‚˜๋ฉด ArithmeticException๋ผ๋Š” ์—๋Ÿฌ๋ฅผ ๋˜์ง€๋Š”๋ฐ, Java8์—์„œ ์ด๋Ÿฐ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์— ์•ˆ์ „ํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ๋ชจ๋‘ ๋์ด exact๋กœ ๋๋‚œ๋‹ค.

 

4. ๋ฐฐ์—ด์˜ ๊ธธ์ด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์—ฐ์‚ฐํ•˜๊ธฐ

https://school.programmers.co.kr/learn/courses/30/lessons/181854

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

โ–ผ ๋ฐฉ๋ฒ• 1

class Solution {
    public int[] solution(int[] arr, int n) {
        int[] answer = new int[arr.length];
        
        for(int i = 0; i < arr.length; i++) {
            if(arr.length % 2 == 1) {
                answer[i] = i % 2 == 0 ? arr[i] + n : arr[i];
            } else {
                answer[i] = i % 2 == 1 ? arr[i] + n : arr[i];
            }
        }
        
        return answer;
    }
}

 

โ–ผ ๋ฐฉ๋ฒ• 2

class Solution {
    public int[] solution(int[] arr, int n) {
        int[] answer = arr.clone();
        
        for(int i = arr.length % 2 == 1 ? 0 : 1; i < arr.length; i += 2) {
            answer[i] += n;
        }
        
        return answer;
    }
}

 

โ–ผ ๋ฐฉ๋ฒ• 3

import java.util.stream.IntStream;

class Solution {
    public int[] solution(int[] arr, int n) {
        int[] answer = {};
        
        answer = IntStream.range(0, arr.length).map(i -> arr[i] + (i % 2 == (arr.length % 2 == 1 ? 0 : 1) ? n : 0)).toArray();
        
        return answer;
    }
}

 

5. ๋’ค์—์„œ 5๋“ฑ๊นŒ์ง€

https://school.programmers.co.kr/learn/courses/30/lessons/181853

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

โ–ผ ๋ฐฉ๋ฒ• 1

import java.util.Arrays;

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

 

โ–ผ ๋ฐฉ๋ฒ• 2

import java.util.Arrays;

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = {};
        
        Arrays.sort(num_list);
        
        answer = Arrays.copyOfRange(num_list, 0, 5);
        
        return answer;
    }
}

 

โ–ผ ๋ฐฉ๋ฒ• 3

import java.util.Arrays;

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = {};
        
        Arrays.sort(num_list);
        
        answer = Arrays.copyOf(num_list, 5);
        
        return answer;
    }
}

Arrays.copyOfRang(๋ณต์‚ฌํ•  ์›๋ณธ ๋ฐฐ์—ด, ๋ณต์‚ฌ๋ฅผ ์‹œ์ž‘ํ•  ์ธ๋ฑ์Šค, ๋ณต์‚ฌ๋ฅผ ๋๋‚ผ ์ธ๋ฑ์Šค) : ์ง€์ •ํ•œ ๋ฐฐ์—ด์—์„œ ํŠน์ • ๋ฒ”์œ„๋งŒํผ์˜ ์š”์†Œ๋“ค์„ ๋ณต์‚ฌํ•ด ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜
Arrays.copyOf(์›๋ณธ ๋ฐฐ์—ด, ๋ณต์‚ฌํ•  ๊ธธ์ด) : ์ง€์ •ํ•œ ๋ฐฐ์—ด์„ ์ธ๋ฑ์Šค 0๋ถ€ํ„ฐ ์›ํ•˜๋Š” ๊ธธ์ด๋งŒํผ ๋ณต์‚ฌ

 

โ–ผ ๋ฐฉ๋ฒ• 4

import java.util.Arrays;

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = {};
        
        answer = Arrays.stream(num_list).sorted().limit(5).toArray();
        
        return answer;
    }
}