https://school.programmers.co.kr/learn/courses/30/lessons/17686
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
// head 먼저 (대소구분 X)
// number 숫자가 될 수 있게
// tail
// 위의조건해당사항없는 동일순서면 들어온순서 그대로 반환해야함
// 정렬방식을 변경해야한다.
// class Node를 만들고
// 만약 string 완전체하나
// number 하나
// tail 하나 이런식으로 하면 어떨까..
// comparable 또는 comparator 를 활용해야할듯
// sort를 할때 조건을 여러개 달아주자
// arraylist에 Node를 넣고 정렬을 Collections.sort()해버리는게 나을듯.
import java.util.*;
class Solution {
class Node {
String str;
String head;
int number;
String tail;
public String getStr() {
return str;
}
public Node(String str) {
this.str = str;
String s = str.toUpperCase();
int start = -1, end = -1;
boolean find = false;
// 숫자의 시작과 끝 찾기
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= '0' && c <= '9') {
if (!find) {
start = i;
find = true;
}
end = i;
} else if (find) {
break;
}
}
this.head = str.substring(0, start);
this.number = Integer.parseInt(str.substring(start, end + 1));
this.tail = str.substring(end + 1);
}
}
public String[] solution(String[] files) {
List<Node> list = new ArrayList<>();
for (String file : files) {
list.add(new Node(file));
}
Collections.sort(list, (n1, n2) -> {
// head를 대소문자 구분 없이 비교
int headCompare = n1.head.compareToIgnoreCase(n2.head);
if (headCompare == 0) {
// 숫자 비교
if (n1.number == n2.number) {
return 0; // 들어온 순서 유지
}
return n1.number - n2.number;
}
return headCompare;
});
return list.stream()
.map(Node::getStr)
.toArray(String[]::new);
}
}
'Algorithm & Data Structures > Programers' 카테고리의 다른 글
Lv 3. 최고의 집합 (0) | 2024.09.28 |
---|---|
Lv 3. 숫자게임 (0) | 2024.09.27 |
Lv 3. 등굣길 (0) | 2024.09.25 |
Lv 3. 단어 변환 (0) | 2024.09.24 |
Lv 3. 야근 지수 (0) | 2024.09.22 |