문제
무엇인가를 창조하는 것은 어렵다. 오민식은 지금까지 어려운 다른나라의 언어를 쓰면서 백성들이 고통에 받는 것을 슬퍼하고 새로운 언어를 만들고자 했다. 그는 창조의 고통에 시달리던 중에 결국 오영식에게 자신의 못다 이룬 꿈을 꼭 이루어달라면서 오영식에게 창조의 임무를 넘겼다.
오영식은 자신의 형이 창조에 고통에 시달리는 모습을 보고 마음이 아파서 자신은 창조를 하지 않기로 했다. 영식이는 표절을 하기로 했는데 세계적인 추세에 맞게 영어를 표절하기로 했다.
영식이는 자신의 형의 이름을 따서 민식어라고 이름붙였다.
민식어에는 알파벳이 20개가 있다.
영어는 a b c d e f g h i j k l m n o p q r s t u v w x y z의 순서이지만, 민식어는 a b k d e g h i l m n ng o p r s t u w y의 순서이다.
민식어는 영어의 순서를 따르기는 하지만, 약간 변형시켜서 따른다. 그리고 ng는 n과 o사이에 오는 하나의 알파벳이다. ng는 무조건 이 알파벳으로 생각한다.
영식이는 사람들이 쉽게 민식어를 배울 수 있도록 민식어 사전을 만들려고 한다. 따라서 몇 개의 단어를 정렬하고자 한다. 민식어 단어가 주어졌을 때, 그것을 민식어의 순서대로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 민식어 단어의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄부터 한 줄에 하나씩 단어가 입력으로 들어온다. 단어의 길이는 최대 50자이다. 민식어에 없는 알파벳이 입력으로 주어지는 경우는 없다. 모든 단어는 중복되지 않는다.
출력
첫째 줄부터 차례대로 정렬한 결과를 출력한다.
예제 입력 1 복사
4
abakada
alpabet
tagalog
ako
예제 출력 1 복사
abakada
ako
alpabet
tagalog
예제 입력 2 복사
6
ang
ano
anim
alak
alam
alab
예제 출력 2 복사
alab
alak
alam
anim
ano
ang
예제 입력 3 복사
6
siya
niya
kaniya
ikaw
ito
iyon
예제 출력 3 복사
kaniya
ikaw
ito
iyon
niya
siya
예제 입력 4 복사
5
kaba
baka
naba
ngipin
nipin
예제 출력 4 복사
baka
kaba
naba
nipin
ngipin
예제 입력 5 복사
7
knilngiggnngginggn
ingkigningg
kingkong
dingdong
dindong
dingdont
ingkblot
예제 출력 5 복사
kingkong
knilngiggnngginggn
dindong
dingdont
dingdong
ingkblot
ingkigningg
예제 입력 6 복사
4
silangang
baka
bada
silang
예제 출력 6 복사
baka
bada
silang
silangang
간단한 문자열 정렬 구현 문제
1. 변환
2. changed를 기준으로 정렬
3. 정렬된 순서대로 original 출력
import java.io.*;
import java.util.*;
public class Main {
public static class MinsikLanguage {
String changed;
String original;
public MinsikLanguage(String changed, String original) {
this.changed = changed;
this.original = original;
}
}
private static char translate(char c, char cp) {
if(c == 'a'){
return 'a';
}
if(c == 'b'){
return 'b';
}
if(c == 'k'){
return 'c';
}
if(c == 'd'){
return 'd';
}
if(c == 'e'){
return 'e';
}
if(c == 'g'){
return 'f';
}
if(c == 'h'){
return 'g';
}
if(c == 'i'){
return 'h';
}
if(c == 'l'){
return 'i';
}
if(c == 'm'){
return 'j';
}
if(c == 'n' && cp == 'g'){
return 'l';
}
if(c == 'n'){
return 'k';
}
if(c == 'o'){
return 'm';
}
if(c == 'p'){
return 'n';
}
if(c == 'r'){
return 'o';
}
if(c == 's'){
return 'p';
}
if(c == 't'){
return 'q';
}
if(c == 'u'){
return 'r';
}
if(c == 'w'){
return 's';
}
if(c == 'y'){
return 't';
}
return 'u';
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
List<String> s = new ArrayList<>();
for (int i = 0; i < n; i++) {
s.add(br.readLine());
}
List<MinsikLanguage> minsikLanguages = new ArrayList<>();
for(int i = 0 ; i < n ; i++){
String temp = "";
for(int j = 0 ; j < s.get(i).length(); j++){
temp += translate(s.get(i).charAt(j), j == s.get(i).length()-1 ? ' ' : s.get(i).charAt(j+1));
}
minsikLanguages.add(new MinsikLanguage(temp,s.get(i)));
}
Collections.sort(minsikLanguages, (a,b) -> {
return a.changed.compareTo(b.changed);
});
for(MinsikLanguage m : minsikLanguages){
System.out.println(m.original);
}
}
}
'Algorythms' 카테고리의 다른 글
소프티어 HCPC 2023 Lv2 X marks the Spot java 풀이 (0) | 2024.06.29 |
---|---|
소프티어 Lv3 나무섭지 java 풀이 (0) | 2024.06.28 |
소프티어 HSAT 기출 Lv3 순서대로 방문하기 java 풀이 (0) | 2024.06.28 |
프로그래머스 Level2 도넛과 막대 그래프 java 풀이 (0) | 2024.05.14 |
프로그래머스 Level1 K번째수 java 풀이 (0) | 2024.05.03 |