반응형
https://leetcode.com/problems/license-key-formatting/description/
문자열 재구성 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
1. 걸러진 문자열 filteredS와 정답 ans를 선언해 줍니다.2. s에서 '-'를 제거하고 모두 대문자로 만들어 filteredS에 저장해줍니다.3. firstGroupLength를 선언해 k만큼 문자열을 묶어 group을 만들었을 때 남을 문자열 길이를 저장해줍니다.4. firstGroupLength만큼의 잉여 문자열이 ans의 초기값이 됩니다. 이를 저장해줍니다.
📔 풀이과정
* ans의 있거나 s와 같지 않다면 k로 묶었을 때 남는 문자열이 존재한다는 의미입니다. 따라서 그 경우에는 ans에 "-"를 더해줍니다.
1. firstGroup에 대한 처리가 끝났으니 length부터 시작해 for loop를 수행합니다. 그 다음 현재 index i부터 i+ k만큼의 문자를 filteredS로부터 잘라 ans에 붙여줍니다.
📔 정답 출력 | 반환
ans를 반환합니다.
📕 Code
📔 C++
class Solution {
public:
string licenseKeyFormatting(string s, int k) {
string filteredS, ans;
for(auto c : s) if(c != '-') filteredS += c;
for(auto &a : filteredS) a = toupper(a);
int firstGroupLength = filteredS.size() % k;
ans = filteredS.substr(0, firstGroupLength);
if(ans != "" && ans != s) ans += "-";
for(int i = firstGroupLength; i < filteredS.size(); i+=k) {
if(i != firstGroupLength) {
ans += "-";
}
ans += filteredS.substr(i, k);
}
return ans;
}
};
📕 Test Case
몇 가지 반례를 직접 작성해 보았습니다.
input
s = "2-4A0r7-4k"
k = 4
답
"24A0-R74K"
input
s = "e"
k = 2
답
"e"
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > String' 카테고리의 다른 글
(C++) - LeetCode (easy) 541. Reverse String II (0) | 2023.04.16 |
---|---|
(C++) - LeetCode (easy) 521. Longest Uncommon Subsequence I (0) | 2023.04.14 |
(C++) - LeetCode (easy) 459. Repeated Substring Pattern (0) | 2023.03.22 |
(C++) - LeetCode (easy) 434. Number of Segments in a String (0) | 2023.03.14 |
(C++) - LeetCode (easy) 412. Fizz Buzz (0) | 2023.03.10 |