자바생
Published 2021. 6. 30. 09:50
자바(백준) 20365 블로그2 BOJ(Java)
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
profile

자바생

@자바생

틀린 부분이 있다면 댓글 부탁드립니다~😀

검색 태그