Programmers/Lv.1

프로그래머스 Lv.1 - 문자열 나누기

junnrecorder 2023. 9. 16. 22:11

https://school.programmers.co.kr/learn/courses/30/lessons/140108

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 첫 번쩨 문자인지에 대한 여부를 체크할 boolean 변수(isFirst) 하나를 선언한다.

2. 이 문자는 현재 순회하는 문자가 처음 또는 문자열 분할 후 나오는 단어의 첫 문자인 경우, true 값을 가진다.

3. isFirst == true에서 첫번째 문자를 변수에 담고, isFirst 값을 false로 바꿔준다. 이 때, 현재 첫 문자도 횟수에 들어가야 하므로 첫번째 문자와 동일한 문자가 나오는 횟수를 담은 변수 same_cnt의 값을 하나 더해준다.

4. 값은 문자와 다른 문자의 수가 같을 때까지 반복을 해주고 값이 같다면 answer 변수의 값을 하나 더해준다.

5. same_cnt 와 diff_cnt를 초기화한다.

6. 반복문을 다 마치고 same_cnt 또는 diff_cnt의 값이 0이 아니면 분할 후 처리가 안된 단어가 있으므로 answer에 1을 더 더한다.

 

 

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
class Solution {
    public int solution(String s) {
        int answer = 0;
        boolean isFirst = true// 첫번째 문자인지 체크
        char first_ch = ' '// 첫번째 문자
        
        int same_cnt = 0// 첫번째 문자와 같은 문자의 수
        int diff_cnt = 0// 첫번쨰 문자와 다른 문자의 수
        
        for(int i=0; i<s.length(); i++) {
            if(isFirst) { // 첫번째 문자 차례인 경우
                first_ch = s.charAt(i); // 현재 순회한 문자를 저장
                isFirst = false// 플래그를 false로 변경
                
                same_cnt++// 자기 자신도 계산을 해야하므로 same_cnt에 값을 하나 더해준다.
            } else {
                if(first_ch == s.charAt(i)) same_cnt++;
                else diff_cnt++;
                
                if(same_cnt == diff_cnt) { // 값이 같게 되는 경우
                    isFirst = true// 다시 첫번째 문자를 구해야 하므로 isFirst의 값을 true로 변경
                    answer++// 단어를 분리했으므로 answer 값을 하나 증가시킨다.
                    
                    same_cnt = 0;
                    diff_cnt = 0// 갯수 초기화
                }
            }
        }
        
        if(same_cnt != 0 || diff_cnt != 0) answer++// 나머지 문자가 있는 경우 하나를 더 더한다.
        
        return answer;
    }
}
cs