성능 요약
메모리: 39984 KB, 시간: 3112 ms
분류
정렬, 문자열
제출 일자
2023년 11월 9일 15:16:53
문제 설명
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
길이가 짧은 것부터
길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다.
13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours
i
im
it
no
but
more
wait
wont
yours
cannot
hesitate
package BronzeLevel;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class Bronze5 {
public static void main(String[] args) {
// 버퍼 사용 어색하므로 Scanner 사용함
Scanner sc = new Scanner(System.in);
// 몇개의 단어를 넣을 것인지 정하는 변수에 Scanner 사용
int index = sc.nextInt();
// List에 String을 값을 넣겠다 선언
List<String> wordList = new ArrayList<>();
// 반복문을 사용하는데, 위 선언한 index 만큼 반복 할 것
for (int i = 0; i < index; i++) {
// 문자열을 넣어 줄 거야
String word = sc.next();
// 위 선언한 wordList에 word 변수 값이 있으면 false 없으면 true이므로 조건문 사용
if (!wordList.contains(word)) {
// 이 조건문에 들어오면 wordList에 word 값이 없는 것이므로, wordList에 값을 추가
wordList.add(word);
}
}
// sort 매소드를 사용하여 정렬 할 것임 위에서 이미 반복되는 단어는 없으니 정렬만 하면 됨
Collections.sort(wordList, new Comparator<String>() {
// compare 매소드를 사용해 길이 값을 비교
@Override
public int compare(String str1, String str2) {
// str1이랑 str2랑 비교 값을 cmp에 저장
int cmp = Integer.compare(str1.length(), str2.length());
// 만약 두개의 문자열 길이가 같으면 cmp는 0이 된다.
if (cmp == 0) {
// 알파벳 순서대로 바꿀 수 있게 cmp에 덮어 씌어준다.
cmp = str1.compareTo(str2);
}
// cmp를 리턴~
return cmp;
}
});
// 아 출력해버리자
for (String word : wordList) {
System.out.println(word);
}
}
}
오랜만에 Java 사용을 해봤다.
처음 프로그래밍 언어를 접한 언어이며, 나한테는 나름 뜻 깊고 추억이 많은 언어다.
백준 알고리즘도 6개월 만에 다시 풀어본건데, 얼만큼 녹슬었는지 보려고 시도했던 실버5 문제
늘 항상 브론즈에서 놀았었는데 실버5 문제를 풀 수 있는걸 보니, Node.JS 하면서
뇌가 좀 푹신푹신하게 된거 같다.
취업 전까지 괜찮다면 앞으로 매일 한 문제씩 알고리즘을 풀어 Velog에 작성해 볼 예정이다.
으디 한번 github에 빼곡한 잔디 함 심어보자꾸나 취업하게 된다면 어쩔수 없이 잠시 놓아야 할 테지만,
취업이 언제 될 지도 모르고... 꾸준함이 답이라고 그냥 계속 하다보면 볕 뜰날 있겠지 뭐