05
29

โ–ถ ์œ ํ˜•

  • ๋‚ด๋ฆผ์ฐจ์ˆœ, ์˜ค๋ฆ„์ฐจ์ˆœ ๊ฐ™์€ ์ •๋ ฌ์„ ์–ด๋–ค ๊ธฐ์ค€์— ๋งž์ถฐ์„œ ํ•ด์•ผ๋  ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ Comparable์„ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค

์ž๋ฐ”๋กœ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๋ณด๋ฉด ์ž๋ฃŒํ˜• ๋‹ด์•„๋‘˜ ํด๋ž˜์Šค๋ฅผ ๋งค์šฐ ์ž์ฃผ ์„ ์–ธํ•œ๋‹ค. ํด๋ž˜์Šค ์„ ์–ธํ•  ๋•Œ Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ implementsํ•ด๋‘๊ณ , compareTo ๋ฉ”์„œ๋“œ๋ฅผ @Overrideํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

implements Comparable<T>

@Override
public int compareTo(T o) {
	return 0 or 1 or -1
}

 

์ด๋ฒˆ์— ์—ฐ์Šต์šฉ์œผ๋กœ ๋ฌธ์ œ ํ’€๋ฉด์„œ ์‚ฌ์šฉํ•œ Node ํด๋ž˜์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณด์ž.

class Node implements Comparable<Node>{
    int v, w;
    Node(int v, int w){
        this.v = v;
        this.w = w;
    }
    
    @Override
    public int compareTo(Node o) {
        if(this.w == o.w) {
            return Integer.compare(o.v, this.v); // ๊ฐ€์ค‘์น˜๊ฐ€ ๊ฐ™์œผ๋ฉด ๊ฐ’์ด ํฐ๊ฒŒ ๋จผ์ € ์™€์•ผ๋จ
        }else {
            return Integer.compare(this.w, o.w); // ๊ฐ€์ค‘์น˜๊ฐ€ ๋” ํฐ๊ฒŒ ๋ฉ€๋ฆฌ๊ฐ€์•ผ๋จ(์˜ค๋ฆ„์ฐจ์ˆœ)
        }
    }
}

compareTo์˜ ๊ธฐ์ค€์ ์„ ์•”๊ธฐํ•ด๋‘๋Š” ๊ฒŒ ์ค‘์š”ํ•˜๋‹ค. ํ•ญ์ƒ this๊ฐ€ ๊ธฐ์ค€์ด๊ณ , compareTo์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜ค๋Š”๊ฒŒ ๋น„๊ตํ•  ๋Œ€์ƒ์ด๋‹ค.

๊ฐ primitive ์ž๋ฃŒํ˜•์—๋Š” compare ํ•จ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ ๋น„๊ตํ•˜๋Š” ๋‘ ๊ฐ’ ์ค‘ ์˜ค๋ฅธ์ชฝ์ด ํฌ๋ฉด 1, ๊ฐ™์œผ๋ฉด 0, ์ž‘์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ฆ‰ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์„๋•Œ๋Š” ์˜ค๋ฅธ์ชฝ์ด ๋” ํฌ๊ฒŒ ๋งŒ๋“ค๊ณ , ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ํ•˜๊ณ ์‹ถ์„ ๋•Œ๋Š” ์ž‘๊ฒŒ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค. ๊ฐ™์€ ๊ฒฝ์šฐ์— ํ•œ๋ฒˆ๋” ๋น„๊ต์‹œ์ผœ์„œ ์ •๋ ฌ ์กฐ๊ฑด์„ ์„ธ๋ถ„ํ™” ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

์ด๋ ‡๊ฒŒ ๋งŒ๋“  compareTo๋Š”, ์ด ์ž๋ฃŒํ˜•์œผ๋กœ ๋งŒ๋“  list๋ฅผ sort(null) ํ•ด์ฃผ๋ฉด ์•Œ์•„์„œ ์ •๋ ฌ๋œ๋‹ค. null์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ Comparable์ด ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

โ–ถ ์ „๋žต

์™ธ์›Œ์•ผ ๋˜๋Š”๊ฑฐ๋ผ์„œ ๊ทธ๋ƒฅ ๋ฌด์กฐ๊ฑด ๋งŽ์ด ์ณ๋ด์•ผ๋œ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค๊ฐ™์€ ์ž๋™์™„์„ฑ์ด ์•ˆ๋˜๋Š” ํ™˜๊ฒฝ์—๋„ ์ˆ˜์›”ํ•˜๊ฒŒ ์“ธ ์ค„ ์•Œ์•„์•ผํ•œ๋‹ค.

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

 

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

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

programmers.co.kr

import java.util.*;

class Node implements Comparable<Node>{
    int v, w;
    Node(int v, int w){
        this.v = v;
        this.w = w;
    }
    
	@Override
	public int compareTo(Node o) {
		if(this.w == o.w) {
			return Integer.compare(o.v, this.v); // ๊ฐ€์ค‘์น˜๊ฐ€ ๊ฐ™์œผ๋ฉด ๊ฐ’์ด ํฐ๊ฒŒ ๋จผ์ € ์™€์•ผ๋จ
		}else {
			return Integer.compare(this.w, o.w); // ๊ฐ€์ค‘์น˜๊ฐ€ ๋” ํฐ๊ฒŒ ๋ฉ€๋ฆฌ๊ฐ€์•ผ๋จ(์˜ค๋ฆ„์ฐจ์ˆœ)
		}
	}
}

class Solution {
    public int[] solution(int[] numlist, int n) {
        int[] answer = new int[numlist.length];
        List<Node> arr = new ArrayList<Node>();
        // ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ™์œผ๋ฉด ๋” ํฐ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•จ
        int idx = 0;
        for(int i: numlist){
            arr.add(new Node(numlist[idx], Math.abs(n-numlist[idx++])));
        }
        
        arr.sort(null);
        idx = 0;
        for(Node i: arr){
            answer[idx++] = i.v;
        }
        
        return answer;
    }
}

 

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”!
๋ฐ˜์‘ํ˜•
COMMENT