어김없이 찾아온 코테 스터디 3일 차! 시작해 보도록 하자
문제 설명
문자열이 주어지면 문제의 규칙에 따라 첫 번째 문자열과 다음에 나오는 문자열을 비교하여 이에 대한 개수를 구하는 문제이다.
https://school.programmers.co.kr/learn/courses/30/lessons/140108
생각 흐름
문제를 봤을 때, 주어진 규칙들이 너무 많아서 당황스러웠다. 하지만 천천히 읽어보기로 하였다.
막상 읽어보니 규칙은 세세하게 적혀있었지만 그 속에 말하고자 하는 알고리즘은 꽤나 단순해 보였다.
첫번째 문자와 다음부터 나오는 문자들을 비교해 이것들의 수를 비교하는 비교적 간단한 문제였다.
하지만 ㅋㅋ 막상 코드를 작성하니 머리가 멈추고 멍해지기 시작했던 것 같다.
문제에서 잘못 이해한 부분이 살짝 있었는데, 문자열의 첫번째 문자를 c로 고정하고 푸는 줄 알았지만 이게 아닌 문자열을 자라낼 때마다 첫번째 문자가 바뀌는 것이었다.
다음부터는 문제를 제대로 꼼꼼히 읽어야겠다는 생각을 하였다.
#include <string>
#include <iostream>
using namespace std;
int solution(string s) {
int answer = 0;
int c1 = 0, c2 = 0;
char c = s[0];
for (int i = 0; i < s.length(); i++) {
if (s[i] == c) {
c1++;
}
else {
c2++;
}
if (c1 == c2) {
answer++;
c1 = 0; c2 = 0;
c = s[i+1];
}
}
if (c1 != 0) answer++;
return answer;
}
int main () {
string s;
cin >> s;
cout << solution(s);
}
공부한 내용 정리
이번 문제를 보면서 조건에 따라 문자열을 나눈다는 점에서 특정 문자가 나오면 끊어서 문자열을 저장하는 split() 함수를 떠올리게 되었습니다. C++에서는 이를 직접 구현해야 하기 때문에 이번 기회에 한번 더 공부하고 싶었습니다.
지금까지 공부한 find(), substr() 함수를 사용해서 구현해보고자 합니다.
split() 함수 구현하기!
find() 함수와 substr() 함수를 이용해 구현할 수 있습니다.
#include <bits/stdc++.h>
using namespace std;
vector <string> split(const string &input, string delimiter) {
vector <string> result; // 각 문자열을 담은 vector 선언
auto start = 0; // 처음 인덱스 start
auto end = input.find(delimiter); // delimeter이 나오는 인덱스 반환 end
while (end != string::npos) { // delimiter을 찾지 못할때까지
result.push_back(input.substr(start, end - start));
start = end + delimiter.size(); // delimiter위치와 delimiter 사이즈를 더해준다음 start 재정의
end = input.find(delimiter, start); // 새로운 start 위치에서 delimiter 찾은 인덱스 값 end
}
result.push_back(input.substr(start)); // 나머지 부분 result에 넣기
return result;
}
int main () {
string str = "apple, banana, orange, grape";
vector <string> fruits = split(str, ",");
for (auto i : fruits) {
cout << i << " ";
}
return 0;
}
출력: apple banana orange grape
'코테 > 항해99' 카테고리의 다른 글
[99클럽 코테 스터디 6일차 TIL] #해시2 (2) | 2024.11.03 |
---|---|
[99클럽 코테 스터디 5일차 TIL] #해시 (1) | 2024.11.01 |
[99클럽 코테 스터디 4일차 TIL] #문자열4 (1) | 2024.10.31 |
[99클럽 코테 스터디 2일차 TIL] #문자열2 (1) | 2024.10.29 |
[99클럽 코테 스터디 1일차 TIL] # 문자열 (1) | 2024.10.28 |