728x90
오답 노트 & 새로 알게 된 점
해당 문제는 그렇게 어렵지 않게 풀었다.
두 개의 arraylist를 만들어서 R를 구분자로, B를 구분자로 파싱하여 각각의 arraylist에 넣어줬다.
그래서 arraylist의 원소의 갯수를 비교하여 더 많은 원소의 개수를 가진 것을 한 번에 다 깔고, 적은 원소를 가진 것을
중간에 덧 입히는 식으로 생각했다.
왜 파싱을 생각하게 됐나?
처음에는 큐나 스택을 이용해서 현재 value와 다음 value가 같으면 String에 더해줘서 arraylist에 추가해준다 이런 생각을 했다. 그러나 생각해보니 R과 B를 구분자로 하여 파싱을 하면 그러한 귀찮음을 덜 할 수도 있고, 반례들이 존재하지 않을 것이라 생각했다.
코드
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
|
package Greedy;
import java.util.*;
public class Main {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
ArrayList<String> bstr = new ArrayList<>();
ArrayList<String> rstr = new ArrayList<>();
int result = 0;
int size = sc.nextInt();
String str = sc.next();
//R를 구분자로 파싱
StringTokenizer st = new StringTokenizer(str, "R");
while(st.hasMoreTokens()){
bstr.add(st.nextToken());
}
//B를 구분자로 파싱
st = new StringTokenizer(str, "B");
while(st.hasMoreTokens()){
rstr.add(st.nextToken());
}
//R이 더 많으면 R을 한번에 깔고 B의 집단?를 놓으면 됨
//1을 더해주는 이유는 한 번에 깔 때 횟수를 의미
if(rstr.size() >= bstr.size()){
result = 1 + bstr.size();
}
//else도 마찬가지고 B가 더 많으면 B를 한번에 깔고 R의 집단을 놓으면 됨
else{
result = 1 + rstr.size();
}
System.out.print(result);
}
}
|
cs |
728x90
'BOJ(Java)' 카테고리의 다른 글
자바(백준) 5568 카드 놓기 (0) | 2021.07.01 |
---|---|
자바(백준) 13164 행복 유치원 (0) | 2021.07.01 |
자바(백준) 1541 잃어버린 괄호 (0) | 2021.06.29 |
자바(백준) 20300 서강근육맨 (0) | 2021.06.26 |
자바(백준) 20115 에너지 드링크 (0) | 2021.06.25 |