알고리즘/프로그래머스
[프로그래머스] 110 옮기기 C++ (Lv.3)
lheunoia
2023. 4. 12. 17:45
https://school.programmers.co.kr/learn/courses/30/lessons/77886?language=cpp
이번 문제는 월간 코드 챌린지 시즌2 문제였습니다.
📝 문제 풀이
1. 문자열 str에서 110"을 모두 제거하고 acc 문자열에 삽입 (ex. acc = "110110110 ...")
2. "110"이 제거된 문자열에서 가장 뒤에 있는 0의 인덱스 찾기
- 가장 뒤에 있는 0의 인덱스를 찾지 못했다면 (1로만 이루어져 있으면) 문자열 앞에 acc 삽입
- 찾았다면 가장 뒤에 있는 0의 인덱스 뒤에 acc 삽입
👩🏻💻 C++ 코드
#include <string>
#include <vector>
using namespace std;
vector<string> solution(vector<string> s) {
vector<string> answer;
for (auto str: s) {
string acc = ""; // 문자열의 "110" 개수만큼 "110" 더하기
string tmp = "";
for (int i=0; i<str.length(); i++) {
tmp += str[i];
if (tmp.length() >= 3) {
if (tmp.substr(tmp.length()-3, 3) == "110") {
tmp.erase(tmp.length()-3, 3);
acc += "110";
}
}
}
str = tmp;
// 문자열에서 마지막 '0'의 인덱스 찾기
int lastZeroIdx = -1;
for (int i=str.length()-1; i>=0; i--) {
if (str[i] == '0') {
lastZeroIdx = i;
break;
}
}
// 문자열이 1로만 이루어진 경우
if (lastZeroIdx == -1) {
str = acc + str;
} else {
str.insert(lastZeroIdx+1, acc);
}
answer.push_back(str);
}
return answer;
}
반응형