[프로그래머스 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 %
[프로그래머스 1단계] 가장 가까운 같은 글자 -c++ (0) | 2024.02.24 |
---|---|
[프로그래머스 1단계] 실패율 - c++ (테스트 6,7,9,13,24 실패 해결) (0) | 2024.02.24 |
[프로그래머스 1단계] 콜라 문제 -c++ (0) | 2024.02.24 |
[프로그래머스 1단계] 둘만의 암호 - c++ (사례 3, 17,18, 19해결) (0) | 2024.02.23 |
[프로그래머스 1단계] 햄버거 만들기 c++ (1) | 2024.02.10 |
댓글 영역