ํน์ดํ ์ ๋ ฌ - Java [ํ๋ก๊ทธ๋๋จธ์ค ์ ๋ฌธ]
โค๏ธ 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] |
- 4์์ ๊ฐ๊น์ด ์์ผ๋ก [4, 5, 3, 6, 2, 1]์ returnํฉ๋๋ค.
3๊ณผ 5๋ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ผ๋ฏ๋ก ๋ ํฐ 5๊ฐ ์์ ์์ผ ํฉ๋๋ค.
2์ 6์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ผ๋ฏ๋ก ๋ ํฐ 6์ด ์์ ์์ผ ํฉ๋๋ค. - 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
์ ๋ ฌ ๋ฌธ์ ๋ ์ธ์ ๋ ์ด๋ ต์ง๋ง, ํนํ ์ค๋ ๋ฌธ์ ๋ ์ง์ง ์๊ฐ์ ๋ง์ด ์ํ๋ค.
ํ ๋ฒ๋ง ๋ฑ์ฅํ ๋ฌธ์ - 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)์ผ ๋ ์๋์ ๊ฐ์ด ์ ์ํ๋ฉด ์ง์ง ๋!!
- ์ค๋ฆ์ฐจ์
- a > b ๐ return ์์
- a < b ๐ return ์์
- a == b ๐ return 0
- ๋ด๋ฆผ์ฐจ์
- 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