๋ฌธ์
์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ์์
๋ฌธ์ ์ดํด
๋ฌธ์ ์ ๋ฐ๋ก ์กฐ๊ฑด์ ๋ฐ๋ผ ์ ๋ ฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค ๋ผ๋ ๋ง์ด ์๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๋ ์ ๋ ฌ ๋ฌธ์ ๋ก ๋ถ๋ฅํ์ฌ ํผ๋ค.
ํ์ง๋ง ์ ๋ ฌ ๊ธฐ์ค์ด ๋ ๊ฐ์ง๋ก ๋๋๋ค.
- ๊ธธ์ด๊ฐ ์งง์ ๊ฒ ๋ถํฐ
- ๊ธธ์ด๊ฐ ๊ฐ์ผ๋ฉด ์ฌ์ ์์ผ๋ก
- ์ค๋ณต ์ ๊ฑฐ
์ง๊ธ๊น์ง ์ฐ๋ฆฌ๊ฐ ์ ๋ ฌ์ ํ ๋ int
์ ์ค๋ฆ์ฐจ์ ํน์ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ ํ์ง๋ง ์ด ๋ฌธ์ ๋ ํน์ดํ๊ฒ ๋ฌธ์์ ๊ธธ์ด๋ฅผ ์๊ตฌํ๋ฏ๋ก ํด๋น ์๊ตฌ์กฐ๊ฑด์ ๋ง์กฑ์ํค๊ธฐ ์ํด์๋ Comparator ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํด์ ํด๊ฒฐํด์ผ ํ๋ค.
comparator
comparator์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ฌ์ฉ๋ฒ ์ ํตํด์ ์ฌ์ฉ๋ฒ์ ์์งํ์๊ณ ์ค๋๊ฒ๋ ๋ฐฉ๋ฒ์ด์์ :)
๋ฌธ์ ํด๊ฒฐ ์ ๊ทผ
- ๊ธธ์ด๊ฐ ์งง์ ์์ผ๋ก ์ ๋ ฌ ์ ์ํํ ๋๋
str.length()
๋ฅผ ์ด์ฉํ์ฌ ์ํ - ๊ธธ์ด๊ฐ ๊ฐ์ผ๋ฉด ์ฌ์ ์ ์ ๋ ฌ ์ ๊ธฐ๋ณธ์ ์ผ๋ก
Arrays.sort(/String/)
๊ฐ ์ฌ์ ์ ์ ๋ ฌ์ ์ง์ํ๋ฏ๋ก ๊ฐ์ ๊ธธ์ด๋ผ๋ฆฌ ๋ฌถ๋๊ฒ์ด ๊ด๊ฑด - ์ค๋ณต ์ ๊ฑฐ๋ for ๋ฐ๋ณต์ ์ํํ๋ฉฐ ๋ฐฐ์ด์ ๋ ๊น์ง ํ์ฌ index์ ๊ฐ๊ณผ ๋ค์ index์ ๊ฐ์ด ๊ฐ์ผ๋ฉด ์ถ๋ ฅ ์์ ์ถ๋ ฅํ์ง ์๊ณ ๋์ด๊ฐ๊ธฐ
์์ค์ฝ๋
๊ธธ์ด๊ฐ ์งง์ ์์ผ๋ก ์ ๋ ฌ
// ๋จ์ด์ ๊ธธ์ด๊ฐ ์งง์์ ์ ๋ ฌ
Arrays.sort(word, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if(o1.length() > o2.length()) return 1;
else if(o1.length() == o2.length()) return 0;
else return -1;
}
});
๋ ๊ฐ์ฒด์ ๋น๊ต๋ฅผ ์ํด comparator์ compare ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํ๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํด์ผํ ์ ์ o1.length()
๋ก ๋จ์ด์ ๊ธธ์ด๋ก ๋น๊ต๋ฅผ ํ๋ ๊ฒ์ด๋ค.
๊ธธ์ด๊ฐ ๊ฐ์ผ๋ฉด ์ฌ์ ์ ์ ๋ ฌ
for (int i = 0; i < n; i++) {
int j;
for (j = i+1; j < n; j++) {
if(word[i].length() != word[j].length()) break;
}
Arrays.sort(word, i,j);
i = j-1;
}
์ค๋ณต ์ ๊ฑฐ
// ์ค๋ณต ์ ๊ฑฐ ํ ์ถ๋ ฅ
System.out.println(word[0]);
for (int i = 1; i < n; i++) {
if(word[i-1].equals(word[i])) continue;
System.out.println(word[i]);
}
์ ์ฒด ์์ค์ฝ๋
package algorithm.class04_Sort;
import java.util.*;
public class Prob06_WordSorting {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
String[] word = new String[n];
for (int i = 0; i < word.length; i++) {
word[i] = input.next();
word[i] = word[i].toLowerCase();
}
// ๋จ์ด์ ๊ธธ์ด๊ฐ ์งง์์ ์ ๋ ฌ
Arrays.sort(word, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if(o1.length() > o2.length()) return 1;
else if(o1.length() == o2.length()) return 0;
else return -1;
}
});
// ๋จ์ด์ ๊ธธ์ด๊ฐ ๊ฐ์ ๋ ์ฌ์ ์ ์ ๋ ฌ
for (int i = 0; i < n; i++) {
int j;
for (j = i+1; j < n; j++) {
if(word[i].length() != word[j].length()) break;
}
Arrays.sort(word, i,j);
i = j-1;
}
// ์ค๋ณต ์ ๊ฑฐ ํ ์ถ๋ ฅ
System.out.println(word[0]);
for (int i = 1; i < n; i++) {
if(word[i-1].equals(word[i])) continue;
System.out.println(word[i]);
}
}
}
๋๊ธ