๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Programmers lv-0

ํŠน์ดํ•œ ์ •๋ ฌ - Java [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ž…๋ฌธ]

by ๊ทคํ”ผํ‚ค 2022. 11. 28.

 

โค๏ธ Problem

๋”๋ณด๊ธฐ
  • ๋ฌธ์ œ
    ์ •์ˆ˜ n์„ ๊ธฐ์ค€์œผ๋กœ n๊ณผ ๊ฐ€๊นŒ์šด ์ˆ˜๋ถ€ํ„ฐ ์ •๋ ฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ n์œผ๋กœ๋ถ€ํ„ฐ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๋” ํฐ ์ˆ˜๋ฅผ ์•ž์— ์˜ค๋„๋ก ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ •์ˆ˜๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด numlist์™€ ์ •์ˆ˜ n์ด ์ฃผ์–ด์งˆ ๋•Œ numlist์˜ ์›์†Œ๋ฅผ n์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ€๊นŒ์šด ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•œ ๋ฐฐ์—ด์„ returnํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

  • ์ œํ•œ ์‚ฌํ•ญ
    • 1 ≤ n ≤ 10,000
    • 1 ≤ numlist์˜ ์›์†Œ ≤ 10,000
    • 1 ≤ numlist์˜ ๊ธธ์ด ≤ 100
    • numlist๋Š” ์ค‘๋ณต๋œ ์›์†Œ๋ฅผ ๊ฐ–์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

  • ์ž…์ถœ๋ ฅ ์˜ˆ & ์„ค๋ช…
no numlist n result
1 [1, 2, 3, 4, 5, 6] 4 [4, 5, 3, 6, 2, 1]
2 [10000, 20, 36, 47, 40, 6, 10, 7000] 30 [36, 40, 20, 47, 10, 6, 7000, 10000]
  1. 4์—์„œ ๊ฐ€๊นŒ์šด ์ˆœ์œผ๋กœ [4, 5, 3, 6, 2, 1]์„ returnํ•ฉ๋‹ˆ๋‹ค.
    3๊ณผ 5๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ™์œผ๋ฏ€๋กœ ๋” ํฐ 5๊ฐ€ ์•ž์— ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    2์™€ 6์€ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ™์œผ๋ฏ€๋กœ ๋” ํฐ 6์ด ์•ž์— ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. 30์—์„œ ๊ฐ€๊นŒ์šด ์ˆœ์œผ๋กœ [36, 40, 20, 47, 10, 6, 7000, 10000]์„ returnํ•ฉ๋‹ˆ๋‹ค.
    20๊ณผ 40์€ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ™์œผ๋ฏ€๋กœ ๋” ํฐ 40์ด ์•ž์— ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 


 

๐Ÿ’› Solution

ํ’€์ด

import java.util.ArrayList;
import java.util.Comparator;
class Solution {
    public int[] solution(int[] numlist, int n) {
        ArrayList<Integer> arr = new ArrayList<>();
        for(int i=0; i<numlist.length; i++) {
            arr.add(Integer.valueOf(numlist[i]));
        }

        arr.sort(new Comparator<Integer>() {
            public int compare(Integer a, Integer b) {
                int absA = Math.abs(a - n);
                int absB = Math.abs(b - n);

                if (absA == absB) {
                    if (a > b) {
                        return -1;
                    } else {
                        return 1;
                    }
                } else {
                    return absA - absB;
                }
            }
        });

       int[] answer = new int[numlist.length];
       for(int i=0; i<arr.size(); i++) {
            answer[i] = arr.get(i).intValue();
        }
        return answer;
    }
}

 

์ฒ˜๋ฆฌ์†๋„ ํ–ฅ์ƒ์ด ๋” ํ•„์š”ํ•˜๋‹ค

 


 

๐Ÿ’œ Comment

์ •๋ ฌ ๋ฌธ์ œ๋Š” ์–ธ์ œ๋‚˜ ์–ด๋ ต์ง€๋งŒ, ํŠนํžˆ ์˜ค๋Š˜ ๋ฌธ์ œ๋Š” ์ง„์งœ ์ƒ๊ฐ์„ ๋งŽ์ด ์š”ํ–ˆ๋‹ค.

https://gyulpiki.tistory.com/entry/%ED%95%9C-%EB%B2%88%EB%A7%8C-%EB%93%B1%EC%9E%A5%ED%95%9C-%EB%AC%B8%EC%9E%90-Java-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9E%85%EB%AC%B8

 

ํ•œ ๋ฒˆ๋งŒ ๋“ฑ์žฅํ•œ ๋ฌธ์ž - Java [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ž…๋ฌธ]

โค๏ธ Problem ๋”๋ณด๊ธฐ ๋ฌธ์ œ ๋ฌธ์ž์—ด s๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. s์—์„œ ํ•œ ๋ฒˆ๋งŒ ๋“ฑ์žฅํ•˜๋Š” ๋ฌธ์ž๋ฅผ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋ฌธ์ž์—ด์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด๋ณด์„ธ์š”. ํ•œ ๋ฒˆ๋งŒ ๋“ฑ์žฅํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ์—†

gyulpiki.tistory.com

๐Ÿ‘† ์ด์ „์— ๋ฐฐ์—ด์˜ ์ •๋ ฌ์— ๋Œ€ํ•œ ํฌ์ŠคํŒ…์„ ํ–ˆ์—ˆ๋Š”๋ฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ Comparator๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์ฐธ๊ณ ํ• ๋งŒํ•œ ๋‹ค๋ฅธ ๋ธ”๋กœ๊ฑฐ๋“ค์˜ ๋ธ”๋กœ๊ทธ ์ฃผ์†Œ๋ฅผ ์˜ฌ๋ ค๋‘์—ˆ๋‹ค.

 

์ •๋ ฌ ๋น„๊ต ๊ธฐ์ค€์„ ์žฌ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์งœ๋˜ ์ค‘.. ๊ฐ‘์ž๊ธฐ ๊ฐ์ฒดํ™”์— ๊ฝ‚ํ˜€ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋ง์•˜๋‹ค.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
class Solution {
    public int[] solution(int[] numlist, int n) {
        Arrays.sort(numlist);

        ArrayList<Numbers> arr = new ArrayList<>();
        for(int i=0; i<numlist.length; i++) {
            Integer distance = numlist[i] - n;
            arr.add(new Numbers(Integer.valueOf(numlist[i]), distance));
        }

        Collections.sort(arr, new SpecialComparator());

        int[] answer = new int[numlist.length];
        for(int i=0; i<arr.size(); i++) {
            answer[i] = arr.get(i).num;
        }

        return answer;

    }
}

class SpecialComparator implements Comparator<Numbers> {
    @Override
    public int compare(Numbers a, Numbers b) {
        int absA = Math.abs(a.distance);
        int absB = Math.abs(b.distance);

        if (absA == absB) {
            if (a.distance > b.distance) {
                return -1;
            } else {
                return 1;
            }
        } else {
            return absA - absB;
        }
    }
}

class Numbers {
    Integer num;
    Integer distance;

    public Numbers(int num, int distance) {
        this.num = num;
        this.distance = distance;
    }
}

์ฒ˜๋ฆฌ์†๋„.. ์‹ฌ๊ฐํ•˜๋‹ค.

 

 

์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋„ˆ๋ฌด๋‚˜๋„ ๋Š๋ฆฐ ๊ด€๊ณ„๋กœ ์ด ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์‹œ ๋งŒ๋“  ์ฝ”๋“œ๊ฐ€ ๋ฐ”๋กœ ํ’€์ด์— ์˜ฌ๋ ค๋‘” ์ฝ”๋“œ์ด๋‹ค.

๋‹ต์€ ๊ฐ„๋‹จํ–ˆ๋‹ค. Number ํด๋ž˜์Šค ์•ˆ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค. compare ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•  ๋•Œ Integer a์™€ Integer b ๊ฐ’์„ ๊ณ ์ด ๋™๋ด‰ํ•ด์„œ ๊ทธ ์•ˆ์—์„œ ํ•„์š”ํ•œ ์ž‘์—…(๊ธฐ์ค€๊ฐ’์ธ n์—์„œ ๊ฐ๊ฐ a์™€ b๋ฅผ ๋นผ๊ธฐ)์„ ํ•˜๋ฉด ๋œ๋‹ค.

๊ดœํžˆ ํด๋ž˜์Šค ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์„œ ์ž‘์—… ์‹œ๊ฐ„๋„ ๋‘ ๋ฐฐ, ์ฒ˜๋ฆฌ ์†๋„๋„ ๋‘ ๋ฐฐ๊ฐ€ ๋˜์—ˆ๋‹ค๐Ÿ˜‚


compare ๋ฉ”์†Œ๋“œ ์žฌ ์ •์˜ ์‹œ ๋ฐ˜ํ™˜ํ•  ๊ฐ’์— ๋Œ€ํ•ด์„œ๋Š”
compare(Integer a, Integer b)์ผ ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜ํ•˜๋ฉด ์ง„์งœ ๋!!

  1. ์˜ค๋ฆ„์ฐจ์ˆœ
    • a > b ๐Ÿ‘‰ return ์–‘์ˆ˜
    • a < b ๐Ÿ‘‰ return ์Œ์ˆ˜
    • a == b ๐Ÿ‘‰ return 0
  2. ๋‚ด๋ฆผ์ฐจ์ˆœ
    • a > b ๐Ÿ‘‰ return ์Œ์ˆ˜
    • a < b ๐Ÿ‘‰ return ์–‘์ˆ˜
    • a == b ๐Ÿ‘‰ return 0

 

<์ฐธ๊ณ > Comparable ๊ณผ Comparator์˜ ์ดํ•ด
https://st-lab.tistory.com/243

 

์ž๋ฐ” [JAVA] - Comparable ๊ณผ Comparator์˜ ์ดํ•ด

์•„๋งˆ ์ด ๊ธ€์„ ์ฐพ์•„ ์˜ค์‹  ๋ถ„๋“ค ๋Œ€๊ฐœ๋Š” Comparable๊ณผ Comparator์˜ ์ฐจ์ด๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๊ฑฐ๋‚˜ ๊ถ๊ธˆํ•ด์„œ ์ฐพ์•„์˜ค์…จ์„ ๊ฒƒ์ด๋‹ค. ์‚ฌ์‹ค ์•Œ๊ณ ๋ณด๋ฉด ๋‘ ๊ฐœ๋Š” ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์œผ๋‚˜ ์•„๋ฌด๋ž˜๋„ ์ž๋ฐ”๋ฅผ ํ•™์Šตํ•˜๋ฉด์„œ ๊ฐ

st-lab.tistory.com

 

 

2์ ์ด๋ผ๋‹ˆ.. ๋” ์ค˜ ๐Ÿ‘Šโœจ

 

 

 

๋Œ“๊ธ€