
https://school.programmers.co.kr/learn/courses/30/lessons/12915?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[문제]
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
[제한 조건]
strings는 길이 1 이상, 50 이하인 배열입니다.
strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
모든 strings의 원소의 길이는 n보다 큽니다.
인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
[풀이]
글자의 오름차순이면 결국 사전순으로 배치하면 됩니다.
이를 위해서는 조건 sort를 진행해야하는데, 문제 내용을 살펴보면 지정한 인덱스의 글자가 같은 경우에는 포함된 단어 2개를 서로 비교해야 합니다. 서로 다른 경우에는 그대로 해당 글자 (알파벳) 1개를 기준으로 정렬을 해주면 되겠네요.
먼저 코틀린으로 구현했습니다.
fun solution(strings: Array<String>, n: Int): Array<String> {
return strings.sortedWith { a, b ->
if (a[n] == (b[n])) a.compareTo(b)
else a[n].compareTo(b[n])
}.toTypedArray()
}
- 배열을 조건 정렬을 위해 sortedWith를 먼저 활용합니다. 주어진 리스트를 특정 조건을 명시하여 정렬할 수 있게 해주는 함수입니다.
- 이제 경우를 따져서 a[n], b [n] 값이 서로 같다면? 같은 알파벳끼리는 비교할 수 없으므로 전체 문자열끼리 알파벳 우선순위 비교를 해야 합니다. 이때 compareTo라는 함수를 사용해 줍니다.
- compareTo : 두 문자를 사전 순서로 비교하는 메서드입니다. 이는 Java와 Kotlin에서 모두 사용 가능한 메서드로, 오름차순 정렬을 의미합니다.
- 그래서 a [n]과 b [n]의 값이 같다면 전체 문자열 a와 b를 compareTo로 비교해 주고, 다른 경우에는 해당 한 글자를 compareTo로 비교해 줍니다.
다음은 자바로 구현한 코드입니다.
아무래도 compareTo가 자바 코틀린 모두에서 사용할 수 있으니 큰 차이는 없습니다만 sortedWith를 사용하는 부분에서는 조금 상이했습니다. 자바에는 sortedWith 자체가 존재하지 않아서 Array.sort(조건)를 활용하여 문제를 풀이했습니다.
import java.util.Arrays;
class Solution {
public String[] solution(String[] strings, int n) {
Arrays.sort(strings, (a, b) -> {
if (a.charAt(n) == b.charAt(n)) return a.compareTo(b);
else return Character.compare(a.charAt(n), b.charAt(n));
});
return strings;
}
}
- Arrays import를 잊지 말으셔야..ㅎㅎ
- 자바에서는 charAt으로 각 문자에 대해 접근했습니다. 그리고 문자열 비교 compareTo를 사용했습니다.
- 일반적으로 배열 인덱스에 접근하면 똑같이 compareTo를 사용할 수 있는데, charAt으로 Char를 추출한 경우에는 Character.compare()를 활용해야 합니다. compareTo()와 비슷한 개념으로서, 들어가는 2개 Char의 사전 순서를 비교하는 오름차순 정렬 함수입니다.
정렬을 하는 방식에는 다양한 방법이 있습니다.
이후에는 Java의 stream - sorted 함수 또한 활용할 수 있는지 파악해 볼 만한 가치가 있겠습니다.
public static void main(String[] args) {
String[] strings = {"banana", "apple", "cherry"};
String[] sortedStrings = Arrays.stream(strings)
.sorted()
.toArray(String[]::new);
System.out.println(Arrays.toString(sortedStrings)); // [apple, banana, cherry]
}

https://school.programmers.co.kr/learn/courses/30/lessons/12915?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[문제]
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
[제한 조건]
strings는 길이 1 이상, 50 이하인 배열입니다.
strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
모든 strings의 원소의 길이는 n보다 큽니다.
인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
[풀이]
글자의 오름차순이면 결국 사전순으로 배치하면 됩니다.
이를 위해서는 조건 sort를 진행해야하는데, 문제 내용을 살펴보면 지정한 인덱스의 글자가 같은 경우에는 포함된 단어 2개를 서로 비교해야 합니다. 서로 다른 경우에는 그대로 해당 글자 (알파벳) 1개를 기준으로 정렬을 해주면 되겠네요.
먼저 코틀린으로 구현했습니다.
fun solution(strings: Array<String>, n: Int): Array<String> {
return strings.sortedWith { a, b ->
if (a[n] == (b[n])) a.compareTo(b)
else a[n].compareTo(b[n])
}.toTypedArray()
}
- 배열을 조건 정렬을 위해 sortedWith를 먼저 활용합니다. 주어진 리스트를 특정 조건을 명시하여 정렬할 수 있게 해주는 함수입니다.
- 이제 경우를 따져서 a[n], b [n] 값이 서로 같다면? 같은 알파벳끼리는 비교할 수 없으므로 전체 문자열끼리 알파벳 우선순위 비교를 해야 합니다. 이때 compareTo라는 함수를 사용해 줍니다.
- compareTo : 두 문자를 사전 순서로 비교하는 메서드입니다. 이는 Java와 Kotlin에서 모두 사용 가능한 메서드로, 오름차순 정렬을 의미합니다.
- 그래서 a [n]과 b [n]의 값이 같다면 전체 문자열 a와 b를 compareTo로 비교해 주고, 다른 경우에는 해당 한 글자를 compareTo로 비교해 줍니다.
다음은 자바로 구현한 코드입니다.
아무래도 compareTo가 자바 코틀린 모두에서 사용할 수 있으니 큰 차이는 없습니다만 sortedWith를 사용하는 부분에서는 조금 상이했습니다. 자바에는 sortedWith 자체가 존재하지 않아서 Array.sort(조건)를 활용하여 문제를 풀이했습니다.
import java.util.Arrays;
class Solution {
public String[] solution(String[] strings, int n) {
Arrays.sort(strings, (a, b) -> {
if (a.charAt(n) == b.charAt(n)) return a.compareTo(b);
else return Character.compare(a.charAt(n), b.charAt(n));
});
return strings;
}
}
- Arrays import를 잊지 말으셔야..ㅎㅎ
- 자바에서는 charAt으로 각 문자에 대해 접근했습니다. 그리고 문자열 비교 compareTo를 사용했습니다.
- 일반적으로 배열 인덱스에 접근하면 똑같이 compareTo를 사용할 수 있는데, charAt으로 Char를 추출한 경우에는 Character.compare()를 활용해야 합니다. compareTo()와 비슷한 개념으로서, 들어가는 2개 Char의 사전 순서를 비교하는 오름차순 정렬 함수입니다.
정렬을 하는 방식에는 다양한 방법이 있습니다.
이후에는 Java의 stream - sorted 함수 또한 활용할 수 있는지 파악해 볼 만한 가치가 있겠습니다.
public static void main(String[] args) {
String[] strings = {"banana", "apple", "cherry"};
String[] sortedStrings = Arrays.stream(strings)
.sorted()
.toArray(String[]::new);
System.out.println(Arrays.toString(sortedStrings)); // [apple, banana, cherry]
}