상세 컨텐츠

본문 제목

[프로그래머스 1단계] 문자열 나누기 - c++

알고리즘/프로그래머스 1단계

by 셉인 2024. 2. 23. 20:38

본문

728x90

[프로그래머스 1단계] 문자열 나누기 - c++

풀이방법

 

글자가 'x' 기준점이 된다. x 굉장히 헷갈렸는데 x 분리될 때마다 위치가 조정되는 것이다.

그래서 변경되는 x에 따라서 기준을 잘 잡아주는 것이 중요한 포인트였다.

시작될 때부터 same_idx가 1 (즉 x는 같은 인덱스라고 취급)하니깐 만약에 s[0] != s[1]이라면 바로 answer++;가 될 수 있다는 것이다.

그리고 어차피 인덱스가 같은 시점에서 다시 같은 시점을 찾는 것이라 굳이 same,diff의 인덱스를 초기화 시키지 않았다.

->효율성 증가

 

입출력 예

"banana" 3
"abracadabra" 6
"aaabbaccccabba" 3

 

입출력 예시를 보면서 살펴본다면

ba : b == s[0] a== s[1] 인데

b!=a니깐 diff_idx가 증가하므로 1==1 해서 분리가 되는 것이다.

 

이때 직접 분리를 해주지 않고 따로 변수를 두어 인덱스를 유동적으로 처리해 줄 수 있도록 하였다.

 

하나만 더 살펴본다면 (same_dix 를 간단히 s / diff_idx를 간단히 d 로 표시해본다.)

a(s[0]/s==1)a(s==2)a(s==3)b(d==1)b(d==2)a(s==4)c(d==4)c(d==4) / c(s[0]/s==1)c(s==2)a(d==1)b(d==2) / b(s[0]/s==1)a(d==1)로 볼 수 있다.

 

개인적으로 문제 이해가 엥 스러웠다.

같은 느낌을 받으신 분들께서 입출력 예시를 보고 문자열 나누기 프로그래머스 문제를 해결하시면 좋을 것 같다.

 

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int solution(string s) {
    int answer = 0;
    int k=0;
    int same_idx=1, diff_idx=0;
 
    for(int i=1; i<s.size(); i++){
            if(s[k]==s[i]) {
                same_idx++;
            }
            else {
                diff_idx++;
            }
            if(same_idx==diff_idx){
                answer++;
                k=i+1; //k를 이용해 x의 위치 즉, s[0]과 같은 위치를 유동적으로 옮겨준다.
            }
        }
        if(same_idx!=diff_idx){
            answer++; //마지막 다 끝났을 때 둘의 변수의 크기가 다르면 증가시켜주기
        }
    return answer;
}

 

이렇게 간단한 코드가 완성되었다.

 

정답률 56 %

728x90

관련글 더보기

댓글 영역