728x90
반응형
주어진 문자열을 다음과 같은 규칙에 따라 인코딩하는 것입니다:
문자열은 동일한 문자로 이루어진 가장 작은 부분 문자열로 나누어집니다.
예를 들어, "aabbbc"는 ["aa", "bbb", "c"]로 나뉩니다.
각 부분 문자열의 길이가 1보다 큰 경우, 해당 부분 문자열은 길이와 반복되는 문자로 대체됩니다.
예를 들어, "bbb"는 "3b"로 대체됩니다.
마지막으로, 새로운 문자열들은 동일한 순서로 연결되어 새로운 문자열이 반환됩니다.
예를 들어, "aabbbc"의 경우:
"aa"는 그대로 유지됩니다.
"bbb"는 "3b"로 대체됩니다.
"c"는 그대로 유지됩니다.
따라서 최종 결과는 "2a3bc"가 됩니다.
string solution(string s) {
char[] ch = s.ToCharArray();
string ret = "";
char c = ch[0];
int count = 1;
for(int i = 1; i<ch.Length;i++){
if(c == ch[i]){
count++;
}
else{
if(count != 1){
ret += count.ToString();
}
ret += c;
c = ch[i];
count = 1;
}
}
if(count != 1){
ret += count.ToString();
}
ret += c;
return ret;
}
char[] ch = s.ToCharArray();: 주어진 문자열 s를 문자 배열로 변환합니다.
string ret = "";: 최종 결과를 저장할 빈 문자열을 생성합니다.
char c = ch[0];: 첫 번째 문자를 현재 비교 문자로 선택합니다.
int count = 1;: 현재 비교 문자의 반복 횟수를 1로 초기화합니다.
for(int i = 1; i<ch.Length; i++) { ... }: 첫 번째 문자 이후의 문자들에 대한 반복문입니다.
if(c == ch[i]) { count++; }: 현재 비교 문자와 현재 문자가 같으면 반복 횟수를 증가시킵니다.
else { ... }: 현재 문자와 현재 비교 문자가 다르면 다음과 같은 동작을 수행합니다.
if(count != 1) { ret += count.ToString(); }: 반복 횟수가 1이 아니면, 해당 반복 횟수를 문자열로 변환하여 결과에 추가합니다.
ret += c;: 현재 비교 문자를 결과에 추가합니다.
c = ch[i];: 현재 비교 문자를 현재 문자로 갱신합니다.
count = 1;: 반복 횟수를 1로 초기화합니다.
마지막으로, 남아 있는 경우(마지막 문자열에 대한 처리)에 대해서도 동일한 로직을 수행합니다:
728x90
반응형
'CodeSignal' 카테고리의 다른 글
deleteDigit (0) | 2024.01.06 |
---|---|
chessKnight (0) | 2024.01.05 |
Is MAC48 Address? (0) | 2024.01.03 |
Elections Winners (0) | 2024.01.01 |
buildPalindrome (0) | 2023.12.31 |