linkedHashSet
으로 저장한다. linkedHashSet
의 크기만큼 반복하여 저장한다.compareTo
로 문자열을 비교한다.public class P1181 {
static int N;
static String[] wordArray;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
linkedHashSet.add(st.nextToken());
}
wordArray = linkedHashSet.toArray(new String[]{});
for(int i = 0; i < wordArray.length; i++){
// 옆자리와 비교하면서 정렬하기 때문에
for(int j = i+1; j < wordArray.length; j++){
// 글자수 길이가 같은 경우
if(wordArray[i].length() == wordArray[j].length()) {
// wordArray[j]가 사전순으로 앞에 있다.
if(wordArray[i].compareTo(wordArray[j]) > 0) {
String tmp = wordArray[i];
wordArray[i] = wordArray[j];
wordArray[j] = tmp;
}
// 글자수 길이로 비교할 수 있는 경우
} else if (wordArray[i].length() > wordArray[j].length()) {
String tmp = wordArray[i];
wordArray[i] = wordArray[j];
wordArray[j] = tmp;
}
}
{
for (int i = 0; i < wordArray.length; i++) {
System.out.println(wordArray[i]);
}
}
}
+) Comparator를 사용한다면 좀더 깔끔하게 코드를 작성할 수 있을 것이다.
참고: https://st-lab.tistory.com/112
Comparator는 객체를 비교할 수 있도록 해주는 인터페이스로, 자바에서 제공하는 자료형 외에 직접 사용자 클래스를 만들어 비교하거나, 특정 규칙에 의해 비교하고 싶은 경우 유용하게 사용할 수 있다.
String[] arr = new String[N]; // 배열에 단어가 이미 초기화 되었다고 가정한다.
Arrays.sort(arr, new Comparator<String>() {
// 비교 방법을 작성한다.
@Override
public int compare(String s1, String s2) {
// 단어 길이가 같을 경우
if(s1.length() == s2.length()) {
// 사전 순 정렬, 양수가 반환되면 정렬 알고리즘에 의해 값이 바뀐다.
return s1. compareTo(s2);
}
// 그 외의 경우 -> 단어 길이 순으로 정렬한다.
else {
// 양수가 반환되면 정렬 알고리즘에 의해 값이 바뀔 것이다.
return s1.length() - s2.length();
}
});