성장기록지
코틀린 세부 정렬 학습 (릿코드 로그 파일 재졍렬 ) 본문
문제
링크 : https://leetcode.com/problems/reorder-data-in-log-files/
문제 해석
조건에 맞게 로그를 재정렬해라.
1.로그의 가장 앞부분은 식별자로서, 순서에 영향을 끼치지 않는다.
2.문자로 구성된 로그가 숫자 로그보다 앞에 오며, 문자 로그는 사전순으로 한다.
3.문자가 동일할 경우에는 식별자순으로 한다.
4.숫자 로그는 입력 순서대로 한다.
문제 해결
문자로 구성된 로그는 코틀린의 sortwith을 활용하여 세부 조건에 맞는 정렬을 하였다.
sortwith()이란??
Comparator를 지정할 수 있습니다. 즉, Comparator를 변경해 자신이 원하는 조건으로 리스트를 정렬하는 것 입니다.
해결 코드
class Solution {
fun reorderLogFiles(logs: Array<String>): Array<String> {
val letterList = mutableListOf<String>()
val digitList = mutableListOf<String>()
for (log in logs){
#식별자 다음 문장의 첫글자까 문자인지 숫자인지 확인
if ((log.split(" ")[1][0]).isLetter()){
letterList.add(log)
}
else {
digitList.add(log)
}
}
letterList.sortWith(Comparator {s1: String,s2:String ->
#식별자,나머지 문자 로 2개로 나누어줌.
val s1x = s1.split(" ", limit = 2)
val s2x = s2.split(" ", limit = 2)
#나머지문자끼리 우선 비교
val compared = s1x[1].compareTo(s2x[1])
#나머지 문자가 같으면
if (compared ==0){
#식별자끼리 비교
s1x[0].compareTo(s2x[0])
} else {
#나머지 문자가 다르면 그냥 값 반환
compared
}
})
letterList.addAll(digitList)
return letterList.toTypedArray()
}
}
1. 문자로그와 숫자로그 나누기
문자로 된 문장은 LetterList에 넣어주고,
숫자로 된 문장은 digitList에 넣어주었습니다.
2. sortWith을 활용하여 문자로그 리스트 세부 정렬하기.
sortwith의 람다식을 이용하여 세부 정렬을 진행해주었다.
먼저 식별자가 아닌 본문을 비교해주고.
본문이 같다면 식별자를 비교해준 후 리턴하였다.
본문이 다르면 본문을 비교한 값을 리턴하여 정렬하였다.
3. 정답 생성
정답을 만들기 위해 두개의 리스트를 합친 후 ,
array로 변환 후 리턴해주었다.
'알고리즘 > 문자열' 카테고리의 다른 글
백준 1213) 팰린드롬 만들기 정리 (python) (0) | 2024.05.31 |
---|