Skip to content

Commit ce1f34a

Browse files
committed
[Silver III] Title: 타노스, Time: 104 ms, Memory: 14388 KB, Score: 100 point -BaekjoonHub
1 parent 3c780d8 commit ce1f34a

2 files changed

Lines changed: 43 additions & 18 deletions

File tree

백준/Silver/20310. 타노스/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44

55
### 성능 요약
66

7-
메모리: 14232 KB, 시간: 112 ms
7+
메모리: 14388 KB, 시간: 104 ms
88

99
### 분류
1010

1111
그리디 알고리즘, 문자열
1212

1313
### 제출 일자
1414

15-
2026년 3월 7일 20:18:56
15+
2026년 3월 7일 20:51:48
1616

1717
### 문제 설명
1818

백준/Silver/20310. 타노스/타노스.java

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,59 @@
22
import java.util.*;
33

44
public class Main {
5+
static final Character ONE = '1';
6+
static final Character TWO = '2';
7+
static final Character ZERO = '0';
58

69
public static void main(String[] args) throws Exception{
710
char[] origin = inputSetting();
8-
String[] halfRemove = removeZeroAndOneHalf(origin);
9-
Arrays.sort(halfRemove);
10-
11-
System.out.println(String.join("", halfRemove));
11+
ArrayList<Character> list = removeZeroAndOneHalf(origin);
12+
System.out.println(makingNewStr(list));
1213
}
14+
15+
private static ArrayList<Character> removeZeroAndOneHalf(char[] origin){
16+
ArrayList<Character> list = new ArrayList<>();
1317

14-
private static String[] removeZeroAndOneHalf(char[] origin){
15-
StringBuilder sb = new StringBuilder();
16-
HashMap<Character, Integer> map = new HashMap<>();
17-
18+
int zero = 0;
19+
int one = 0;
1820
for (int i = 0; i < origin.length; i++) {
19-
if(map.containsKey(origin[i])) map.put(origin[i], map.get(origin[i]) + 1);
20-
else map.put(origin[i], 1);
21+
if(origin[i] == ONE){
22+
one++;
23+
} else {
24+
zero++;
25+
}
26+
list.add(origin[i]);
27+
}
28+
one /= 2;
29+
zero /= 2;
30+
for (int i = list.size() - 1; 0 <= i; i--) {
31+
if(0 < zero && list.get(i) == ZERO){
32+
list.set(i, TWO);
33+
zero--;
34+
}
2135
}
2236

23-
for(Map.Entry<Character, Integer> entry : map.entrySet()){
24-
if(entry.getKey() == '0' || entry.getKey() == '1') entry.setValue(entry.getValue() / 2);
25-
26-
for(int i = 0; i < entry.getValue(); i++) {
27-
sb.append(entry.getKey());
37+
for (int i = 0; i < list.size(); i++) {
38+
if(0 < one && list.get(i) == ONE){
39+
list.set(i, TWO);
40+
one--;
2841
}
2942
}
30-
return sb.toString().split("");
43+
return list;
3144
}
45+
46+
private static String makingNewStr(ArrayList<Character> list ){
47+
StringBuilder sb = new StringBuilder();
3248

49+
for(int i = 0; i < list.size(); i++){
50+
if(list.get(i) != TWO){
51+
sb.append(list.get(i));
52+
}
53+
}
54+
55+
return sb.toString();
56+
}
57+
3358
private static char[] inputSetting() throws Exception {
3459
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
3560
return br.readLine().toCharArray();

0 commit comments

Comments
 (0)