1181 단어 정렬
문제 이해
N개의 단어가 들어온다.
아래 2개 조건에 따라 정렬한다.
-
길이 기준으로 오름차순 정렬한다.
-
길이가 같을 경우 사전 순으로(ASCII 코드 기준) 정렬한다.
문제 풀이
Class를 생성하고, Comparable 인터페이스를 통해 문자열 길이를 기준으로 오름차순 정렬되도록 구현하면 된다.
이 때 중복되는 문자열은 한 번만 출력한다.
코드
import java.util.*;
class Word implements Comparable<Word>{
int length; // 문자열 길이 저장
String str; // 문자열
public Word(String str) {
length = str.length();
this.str = str;
}
@Override
public int compareTo(Word w) {
if(w.length==this.length) {
// 문자열 길이가 같을 경우 사전 순으로 정렬
return this.str.compareTo(w.str);
}
return this.length - w.length;
// 문자열 길이를 기준으로 오름차순 정렬
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
Word[] words = new Word[N];
String str;
for(int i =0;i<N;i++) {
str = sc.next();
words[i] = new Word(str);
}
Arrays.sort(words); // Sorting 과정
StringBuilder sb = new StringBuilder();
String tmp = ""; // 이전에 출력했던 값을 저장할 변수
String now;
for(int i =0;i<N;i++) {
now = words[i].str;
if(now.equals(tmp)) {
// 만약 이전에 출력했던 값과 동일한 경우 재출력하지 않기 위해
// 아래 명령을 수행하지 않는다.
continue;
}
tmp = now;
sb.append(tmp+"\n");
}
System.out.println(sb);
}
}
결과
import java.util.*;
class Word implements Comparable<Word>{
int length; // 문자열 길이 저장
String str; // 문자열
public Word(String str) {
length = str.length();
this.str = str;
}
@Override
public int compareTo(Word w) {
if(w.length==this.length) {
// 문자열 길이가 같을 경우 사전 순으로 정렬
return this.str.compareTo(w.str);
}
return this.length - w.length;
// 문자열 길이를 기준으로 오름차순 정렬
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
Word[] words = new Word[N];
String str;
for(int i =0;i<N;i++) {
str = sc.next();
words[i] = new Word(str);
}
Arrays.sort(words); // Sorting 과정
StringBuilder sb = new StringBuilder();
String tmp = ""; // 이전에 출력했던 값을 저장할 변수
String now;
for(int i =0;i<N;i++) {
now = words[i].str;
if(now.equals(tmp)) {
// 만약 이전에 출력했던 값과 동일한 경우 재출력하지 않기 위해
// 아래 명령을 수행하지 않는다.
continue;
}
tmp = now;
sb.append(tmp+"\n");
}
System.out.println(sb);
}
}
- 2번째 줄 틀렸습니다 : 중복되는 값은 1번만 출력한다는 문구를 읽지 못해 중복 출력시켜 생기는 문제였다. tmp에 이전에 출력되었던 값을 저장하고, 만약 tmp에 저장된 값과 현재 확인하는 문자열이 동일할 경우 continue를 통해 넘어가는 방식으로 구현하였다. 문제 제한 조건을 잘 읽어보는 것이 중요할 것 같다.
Author And Source
이 문제에 관하여(1181 단어 정렬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@idj7183/1181-단어-정렬저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)