Coding Test

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - 12941 : ์ตœ์†Ÿ๊ฐ’ ๋งŒ๋“ค๊ธฐ ์˜ค๋‹ต๋…ธํŠธ( ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ ์‹คํŒจ)

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2023. 9. 14.

โœ”๏ธ์ตœ์†Ÿ๊ฐ’ ๋งŒ๋“ค๊ธฐ

 

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

 

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

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

programmers.co.kr

 

โ—๋ฌธ์ œ ์„ค๋ช…


๊ธธ์ด๊ฐ€ ๊ฐ™์€ ๋ฐฐ์—ด A, B ๋‘๊ฐœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ฐฐ์—ด์€ ์ž์—ฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐฐ์—ด A, B์—์„œ ๊ฐ๊ฐ ํ•œ ๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋ฝ‘์•„ ๋‘ ์ˆ˜๋ฅผ ๊ณฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋งŒํผ ๋ฐ˜๋ณตํ•˜๋ฉฐ, ๋‘ ์ˆ˜๋ฅผ ๊ณฑํ•œ ๊ฐ’์„ ๋ˆ„์ ํ•˜์—ฌ ๋”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์ตœ์ข…์ ์œผ๋กœ ๋ˆ„์ ๋œ ๊ฐ’์ด ์ตœ์†Œ๊ฐ€ ๋˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค. (๋‹จ, ๊ฐ ๋ฐฐ์—ด์—์„œ k๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ๋ฝ‘์•˜๋‹ค๋ฉด ๋‹ค์Œ์— k๋ฒˆ์งธ ์ˆซ์ž๋Š” ๋‹ค์‹œ ๋ฝ‘์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.)

์˜ˆ๋ฅผ ๋“ค์–ด A = [1, 4, 2] , B = [5, 4, 4] ๋ผ๋ฉด

A์—์„œ ์ฒซ๋ฒˆ์งธ ์ˆซ์ž์ธ 1, B์—์„œ ์ฒซ๋ฒˆ์งธ ์ˆซ์ž์ธ 5๋ฅผ ๋ฝ‘์•„ ๊ณฑํ•˜์—ฌ ๋”ํ•ฉ๋‹ˆ๋‹ค. (๋ˆ„์ ๋œ ๊ฐ’ : 0 + 5(1x5) = 5)
A์—์„œ ๋‘๋ฒˆ์งธ ์ˆซ์ž์ธ 4, B์—์„œ ์„ธ๋ฒˆ์งธ ์ˆซ์ž์ธ 4๋ฅผ ๋ฝ‘์•„ ๊ณฑํ•˜์—ฌ ๋”ํ•ฉ๋‹ˆ๋‹ค. (๋ˆ„์ ๋œ ๊ฐ’ : 5 + 16(4x4) = 21)
A์—์„œ ์„ธ๋ฒˆ์งธ ์ˆซ์ž์ธ 2, B์—์„œ ๋‘๋ฒˆ์งธ ์ˆซ์ž์ธ 4๋ฅผ ๋ฝ‘์•„ ๊ณฑํ•˜์—ฌ ๋”ํ•ฉ๋‹ˆ๋‹ค. (๋ˆ„์ ๋œ ๊ฐ’ : 21 + 8(2x4) = 29)
์ฆ‰, ์ด ๊ฒฝ์šฐ๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋ฏ€๋กœ 29๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ์—ด A, B๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ์ตœ์ข…์ ์œผ๋กœ ๋ˆ„์ ๋œ ์ตœ์†Ÿ๊ฐ’์„ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

โ—์ œํ•œ์‚ฌํ•ญ


๋ฐฐ์—ด A, B์˜ ํฌ๊ธฐ : 1,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
๋ฐฐ์—ด A, B์˜ ์›์†Œ์˜ ํฌ๊ธฐ : 1,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜


โ—์ž…์ถœ๋ ฅ ์˜ˆ

A  B  answer
[1, 4, 2] [5, 4, 4] 29
[1,2] [3,4]  10

 

โ—์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…


์ž…์ถœ๋ ฅ ์˜ˆ #1
๋ฌธ์ œ์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2
A์—์„œ ์ฒซ๋ฒˆ์งธ ์ˆซ์ž์ธ 1, B์—์„œ ๋‘๋ฒˆ์งธ ์ˆซ์ž์ธ 4๋ฅผ ๋ฝ‘์•„ ๊ณฑํ•˜์—ฌ ๋”ํ•ฉ๋‹ˆ๋‹ค. (๋ˆ„์ ๋œ ๊ฐ’ : 4) ๋‹ค์Œ, A์—์„œ ๋‘๋ฒˆ์งธ ์ˆซ์ž์ธ 2, B์—์„œ ์ฒซ๋ฒˆ์งธ ์ˆซ์ž์ธ 3์„ ๋ฝ‘์•„ ๊ณฑํ•˜์—ฌ ๋”ํ•ฉ๋‹ˆ๋‹ค. (๋ˆ„์ ๋œ ๊ฐ’ : 4 + 6 = 10)
์ด ๊ฒฝ์šฐ๊ฐ€ ์ตœ์†Œ์ด๋ฏ€๋กœ 10์„ return ํ•ฉ๋‹ˆ๋‹ค.

 


๐Ÿช„ํ’€์ด

ํ’€์ด๋ฒ•์œผ๋ก  ๊ฐ„๋‹จํ•˜๋‹ค.

์ฃผ์–ด์ง„ ๋ฐฐ์—ด 2๊ฐœ์—์„œ ํฐ ๊ฐ’๊ณผ ์ž‘์€ ๊ฐ’์ด ๊ณฑํ•ด์ ธ์•ผ ๊ณฑํ•œ ํ›„ ๋”ํ–ˆ์„ ๋•Œ ์ตœ์†Ÿ๊ฐ’์ด ๋‚˜์˜จ๋‹ค. 

์ฆ‰ ํ•˜๋‚˜๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ, ํ•˜๋‚˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๊ฐ๊ฐ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๊ฐ’๋“ค์„ ๊ณฑํ•ด์ค˜์•ผ ํ•œ๋‹ค.

์ตœ๋Œ“๊ฐ’ * ์ตœ์†Ÿ๊ฐ’ ์˜ ๋ˆ„์ ํ•ฉ์ด์—ฌ๋งŒ ๊ฒฐ๊ณผ๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋œ๋‹ค.

 

 

โŒํ‹€๋ฆฐ ํ’€์ด

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Arrays;
import java.util.Collections;
 
public class LS_12941 {
    public static void main(String[] args) {
        int[] A = {142};
        int[] B = {544};
        System.out.println(solution(A, B));
    }
 
    public static int solution(int[] A, int[] B) {
        Integer[] copyB = Arrays.stream(B).boxed().toArray(Integer[]::new);
        int answer = 0;
        Arrays.sort(A);
        Arrays.sort(copyB, Collections.reverseOrder());
        for (int i = 0; i < A.length; i++) {
            answer += A[i] * copyB[i];
        }
        return answer;
    }
}
cs

 

 

ํ’€์ด ๋ฐฉ๋ฒ•์€ ๋งž์ง€๋งŒ ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ์—์„œ ํ†ต๊ณผ๋˜์ง€ ์•Š๋Š”๋‹ค.

์ด์œ ๋Š” ์ดํ›„์— ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.

 

โญ•๋งž์€ ํ’€์ด(์Šคํฌ์ฃผ์˜)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.Arrays;
 
public class LS_12941_success {
    public static void main(String[] args) {
        int[] A = {142};
        int[] B = {544};
        System.out.println(solution(A, B));
    }
 
    public static int solution(int[] A, int[] B) {
        int answer = 0;
        Arrays.sort(A);
        Arrays.sort(B);
        for (int i = 0; i < A.length; i++) {
            answer += A[i] * B[B.length - i - 1];
        }
        return answer;
    }
}
cs

 

 

๐Ÿค”ํ‹€๋ฆฐ ์ด์œ  ํ’€์ด

์ „์ž ํ’€์ด๊ฐ€ ํ’€์ด๋Š” ๋งž์ง€๋งŒ ํšจ์œจ์„ฑ ๋ฌธ์ œ์—์„œ ํ‹€๋ฆฌ๋Š” ์ด์œ ๋Š”

int ์˜ primitive type ์„ Integer ์ธ Wrapper Class ๋กœ ๋งค๋ฒˆ ๊ฐ์‹ธ์ค˜์„œ ์ด๋‹ค.

 

  • ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ์ฒด๋ฅผ ํ•„์š”๋กœ ํ•  ๋•Œ
  • ๊ธฐ๋ณธํ˜• ๊ฐ’์ด ์•„๋‹Œ ๊ฐ์ฒด๋กœ ์ €์žฅํ•ด์•ผํ•  ๋•Œ
  • ๊ฐ์ฒด ๊ฐ„ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•  ๋•Œ

์ด๋Ÿฐ ๊ฒฝ์šฐ ๊ธฐ๋ณธํ˜•์„ ๊ฐ์ฒด๋กœ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค๋“ค์„ ๋ž˜ํผ ํด๋ž˜์Šค(wrapper class)๋ผ๊ณ  ํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  Integer๋Š” int์˜ ๋ ˆํผํด๋ ˆ์Šค ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ’ก int์™€ Integer์˜ ์ฐจ์ด์ 

int : ์ž๋ฃŒํ˜•(primitive type)

  • ์‚ฐ์ˆ  ์—ฐ์‚ฐ ๊ฐ€๋Šฅํ•จ
  • null๋กœ ์ดˆ๊ธฐํ™” ๋ถˆ๊ฐ€

Integer : ๋ž˜ํผ ํด๋ž˜์Šค (Wrapper class)

  • Unboxingํ•˜์ง€ ์•Š์„ ์‹œ ์‚ฐ์ˆ  ์—ฐ์‚ฐ ๋ถˆ๊ฐ€๋Šฅํ•จ
  • null๊ฐ’ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

boxing : primitive type -> wrapper class ๋ณ€ํ™˜ ( int to Integer )
unboxing : wrapper class -> primitive type ๋ณ€ํ™˜ ( Integer to int )

 

Integer[] copyB = Arrays.stream(B).boxed().toArray(Integer[]::new);

์—ฌ๊ธฐ์„œ๋Š” ๋งค๋ฒˆ ๋ฐ•์‹ฑ์ด

for (int i = 0; i < A.length; i++) {
    answer += A[i] * B[B.length - i - 1];
}

์—ฌ๊ธฐ์„œ๋Š” ๋งค๋ฒˆ ์–ธ๋ฐ•์‹ฑํ•ด์„œ ์—ฐ์‚ฐ์„ ์‹คํ–‰ ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์„ฑ์ด ๋‚ฎ๋‹ค๊ณ  ๋‚˜์˜จ ๊ฒƒ์ด๋‹ค.

๋Œ“๊ธ€