Level. 1
문제
풀이
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(string s) {
int answer = 0;
char c = s[0];
int scount = 1, ocount = 0;
cout << "용량 : " << s.capacity() << endl;
for(int i=1; i<s.length(); i++){
c == s[i] ? scount++ : ocount++;
if(scount == ocount){
scount = 0;
ocount = 0;
answer ++;
c = s[i+1];
}
}
if(scount > 0) answer ++ ;
return answer;
}
string의 char 요소에 접근할 때 코어덤프가 나지 않길래 왜일까 하고 찾아봤는데
string과 vector는 미리 용량을 크게 할당받는다는 사실을 알았다.
new와 delete의 사용을 줄이기 위해서라고 한다.
string 의 길이와 용량
길이(size)
- C스타일 문자열 char*은 문자열의 끝을 표시하기 위하여 뒤에 \0이 붙어있다.
- C++의 string에서는 해당 문자가 붙지 않는데, string 클래스에서 문자열 길이를 자체적으로 가지고 있기 때문이다.
- size(), length()를 통해 확인할 수 있다.
- C의 경우 \0에 의해 size가 length(글자수)보다 1만큼 더 크다.
용량(capacity)
- string과 vector는 용량이 추가되거나 줄어들 것을 고려하여 용량을 할당받는다.
다른 사람 풀이
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
int answer = 0,nFirst=1,nSecond=0,nTmp=0;
char x = s[0];
bool bBool = false;
if(s.size()== 1){
return 1;
}
for(int i=1; i<s.size(); i++){
s[i] == x ? nFirst++ : nSecond++;
if(nFirst == nSecond){
x = s[i+1];
nFirst = 1;
nSecond =0;
answer ++;
i++;
}
if(i == s.size()-1){
answer ++;
}
}
return answer;
}
https://school.programmers.co.kr/learn/courses/30/lessons/140108
'Algorithm > Programers - C++' 카테고리의 다른 글
[프로그래머스] 콜라 문제 (0) | 2023.06.25 |
---|---|
[프로그래머스] 영어 끝말잇기 (0) | 2023.06.25 |
[프로그래머스] 푸드 파이트 대회 - reverse() (0) | 2023.04.16 |
[프로그래머스] 숫자짝꿍 - map (0) | 2023.04.15 |
[프로그래머스] 점프와 순간 이동 - 비트연산 (0) | 2023.03.21 |