본문 바로가기
프로그래밍/프로그래머스

Lv1_[문자열 나누기, C++] 알고리즘 정리 - 프로그래머스

by 워킹독 2022. 12. 2.
728x90

문제 내용, 조건, 예시는 프로그래머스 사이트 참조

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

 

프로그래머스

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

programmers.co.kr


문제를 해석해서 풀어보면 아래와 같은 흐름이 나온다.

 

1) 첫 글자 x를 뽑음

  1-1) 첫 글자는 무조건 일치하므로 'same_index+1'을 해주고 다음 인덱스로 넘김
2) 다음 글자와 비교
  2-1) 문자가 같으면 same_index+1
  2-2) 문자가 다르면 differ_index+1
3) same_index, differ_index의 값 비교
  3-1) (same_index == differ_index) 같으면 answer+1, index+1하고 "1)반복"
  3-2) (same_index != differ_index) 다르면 "2)반복"
4) index가 문자열 끝일 때(i == s.length - 1), 문자열 뽑는 작업이 끝나지 않았으면 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
35
36
37
38
39
40
41
42
43
44
45
46
#include <string>
#include <vector>
 
using namespace std;
 
int solution(string s) {
    int answer = 0;
 
    char standard_char;
    int same_index = 0;
    int differ_index = 0;
    bool start = true;      // flag
 
    for(unsigned int i = 0; i < s.length(); i++) {
        if(start == true) {         // 1)
            standard_char = s[i];
            same_index++;
            start = false;
        } else {                    // 2)
            if(standard_char == s[i]) {
                same_index++;   // 2-1)
            } else {
                differ_index++// 2-2)
            }
 
            // 3)
            if((same_index == differ_index) &&
                ((same_index > 0&& (differ_index > 0)) ) {
                // 3-1)
                start = true;
                answer++;
            } else {
                // 3-2)
            }
        }
 
        // 4)
        if(i == (s.length() - 1)) {
            if(start == false) {
                answer++;
            }
        }
    }
 
    return answer;
}
cs

 

↓↓↓↓↓↓ 유익했다면 하트 뿅 ♥ ↓↓↓↓↓↓

728x90
반응형

댓글