[백준] 1599. 민식어
문제 링크
풀이 과정
같이 공부한 친구의 풀이 방법입니다.
코드 특징은 다음과 같습니다.
- Stream 클래스의 메서드를 순차적으로 호출해, 단 한 줄로 결과값까지 출력할 수 있게 된다. 따라서, 코드가 깔끔하고 직관적이다.
- 민식어는 일반적인 알파벳 순서에서 c대신 k가 사용되고, n과 o 사이에 새로운 문자열 ng가 사용된다. 따라서, k를 c로, ng를 임의의 문자 N으로 치환한다. 이후, 문자 N의 아스키 코드 값은 n의 아스키 코드 값에 0.5를 더해, n과 o 사이에 위치할 수 있도록 조정한다. 조정된 민식어는 일반 알파벳 순서와 동일하므로, 문자열 정렬 기준으로 정렬한다.
코드
import java.util.Scanner;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
IntStream.range(0, N)
.mapToObj(e -> sc.next().replace('k', 'c').replace("ng", "N"))
.sorted((s1, s2) -> {
int len1 = s1.length(), len2 = s2.length();
for (int i = 0; i < Math.min(len1, len2); i++) {
double ascii1 = getAscii(s1.charAt(i)), ascii2 = getAscii(s2.charAt(i));
if (ascii1 != ascii2) return Double.compare(ascii1, ascii2);
}
return len1 - len2;
})
.map(s -> s.replace('c', 'k').replace("N", "ng"))
.forEach(System.out::println);
}
static double getAscii(char ch) {
return ch == 'N' ? 'n' + 0.5 : ch;
}
}
댓글남기기