즐겁습니다.
뭐가요?
바로 포스팅 하는것이!
처음 포스팅을 할 때만 하더라도 들었던 생각은
'헉...누가 지적하거나 뭐라하면 어떡하지??😅'
'나 진짜 코딩 허접인데 내가 이런 글을 써도 되나?'
'뭔가 내 생각을 내비치는것이 너무 부끄러운 것 같아!' 라는 생각들을 하였습니다 만......
놀랍게도 그 누구도 관심을 주지 않았다!
첫 포스팅으로부터 약 3주정도가 지났는데요, 단 하나의 댓글도 하트도 없습니다!
하지만 오히려 이것은 제게 더 나아갈 힘을 주었던 것 같습니다.
다른사람의 눈초리에 신경쓰지 않고 스스로의 의견을 기록해가며 성장일지를 기록하는 것!
캬. 이것이 바로 참된 성장의 과정 아니겠습니까?
무림 고수들이 누군가에게 보여주려고 성장하는 것을 본 적 있으십니까?
아뇨! 그들은 정말로 스스로를 위해 성장합니다!
물론 그렇다고 제가 고수라는 뜻은 아닙니다만... 스스로를 위해 계속 나아가겠습니다!
자! 기운차게! 문제 보시죠!
익숙한 제목이지요? 이 옛풀이라는 단어가 나온다면 다시 푸는 문제인 것입니다!
//https://school.programmers.co.kr/learn/courses/30/lessons/140108
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
int answer = 0;
int me, you;
me = you = 0;
char tmp = s[0];//초기값 세팅
for (int i = 0; i < s.size(); i++) {
if (tmp == s[i]) {
me++;//기준과 s[i]가 같으면 me++
}
else {
you++;//기준과 s[i]가 다르면 me++
}
//같은 값이라면
if (me == you) {
//초기화 및 answer++;
//tmp에 다음 글자 세팅
me = you = 0;
answer++;
tmp = s[i + 1];
}
//i가 끝값이고 me != you
else if (i == s.size() - 1 && me != you) {
answer++;
}
}
return answer;
}
음~ 그렇군요. 코드의 흐름은 다음과 같습니다.
하지만 지적할 포인트가 있습니다.
우선 if(me==you) 부분에서 tmp=s[i+1]과 같이 접근하고 있습니다.
물론 논리적으로는 접근할 일이 없겠다만("abracadabra"의 case를 생각해보시면 될 것 같습니다.)
그래도! index의 범위를 넘어가는 값에 접근할 수도 있는것 자체가 좀 불편합니다!
또한 그 아래 else if로 처리하였기 때문에 사실 && me!=you는 없어도 되는 코드이지요.
새롭게 작성한 코드를 보겠습니다.
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
int answer = 0;
int num_me, num_not_me;
char stand,now;
num_me = num_not_me = 0;
for(int i=0;i<s.size();i++){
now = s[i];
if(!num_me && !num_not_me){
stand = s[i];
num_me++;
}
else if(stand==now){
num_me++;
}
else{
num_not_me++;
}
if(num_me==num_not_me){
answer++;
num_me = num_not_me = 0;
}
}
if(num_me)
answer++;
return answer;
}
코딩을 해가면서 확실하게 함수 또는 변수 명만 보고도 무슨 기능을 하는지 알 수 있도록 적으려고 노력하고 있습니다!
아직도 많이 부족한 것이 많지만요.
흐름은 비슷합니다.
허나 이 코드에서 남은것의 처리는 for문의 i의 마지막값일때 처리하는것이 아닌 밖에서 num_me의 값이 남아있는지 체크하는 것으로 확인하였다는 점이 다르겠네요.
작은 도움이 되었다면 다행이겠군요.
감사합니다!