-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathSB_17686.java
More file actions
85 lines (71 loc) ยท 2.45 KB
/
SB_17686.java
File metadata and controls
85 lines (71 loc) ยท 2.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import java.util.*;
class SB_17686 {
static List<File> fileList = new ArrayList<>();
private static File setFile(String f, int order) {
char[] cf = f.toCharArray();
String head, num = null, tail = ""; // tail ์ด๊ธฐ๊ฐ ๋น ๋ฌธ์์ด๋ก ์ค์
int stN = 0; // num ์์ ์ธ๋ฑ์ค์ด์ head ์ฐพ์๋์ง ํ๋ณ
int idx = 0;
// head ์ฐพ๊ธฐ
while (!Character.isDigit(cf[idx])){
idx++;
}
head = f.substring(0, idx);
stN = idx;
// num ์ฐพ๊ธฐ (์ต๋ 5์๋ฆฌ)
for (idx = stN; idx < Math.min(stN + 5, cf.length); idx++) {
if (!Character.isDigit(cf[idx])) {
num = f.substring(stN, idx);
break;
}
}
// ์ซ์๊ฐ ๋๊น์ง ์ด์ด์ง ๊ฒฝ์ฐ ์์ธ ์ฒ๋ฆฌ
if (num == null) num = f.substring(stN, idx);
// ๋จ์ ๋ถ๋ถ์ด ์์ผ๋ฉด tail ์ค์
if (idx < cf.length) tail = f.substring(idx);
return new File(head, num, tail, order);
}
public static String[] solution(String[] files) {
int N = files.length;
// ํ์ผ ๊ฐ์ฒด ์ฒ๋ฆฌ
for (int i = 0; i < N; i++) {
File file = setFile(files[i], i);
fileList.add(file);
}
// ํ์ผ ์ ๋ ฌ
Collections.sort(fileList);
// ๊ฒฐ๊ณผ ๋ฐฐ์ด ๋ด๊ธฐ
String[] ans = new String[N];
for (int i = 0; i < N; i++) {
ans[i] = fileList.get(i).toString();
}
return ans;
}
static class File implements Comparable<File>{
String head;
String num;
String tail;
int order;
public File(String head, String num, String tail, int order) {
this.head = head;
this.num = num;
this.tail = tail;
this.order = order;
}
@Override
public int compareTo(File o) {
// head ์ฌ์ ์ ๋น๊ต
int headCmp = this.head.compareToIgnoreCase(o.head);
if (headCmp != 0) return headCmp;
// num ์ซ์ ๋ณํ ํ ๋น๊ต
int numCmp = Integer.compare(Integer.parseInt(num), Integer.parseInt(o.num));
if (numCmp != 0) return numCmp;
// ๋ง์ง๋ง ์
๋ ฅ ์์ผ๋ก ์ ๋ ฌ
return this.order - o.order;
}
@Override
public String toString() {
return head + num + tail;
}
}
}