문제 풀기/코딩인터뷰
[코딩인터뷰 완전정복] 1.3 URLify
MagicDog
2019. 5. 8. 17:57
Q : 문자열에 들어 있는 모든 공백을 '%20'으로 바꾸는 메서드를 작성하라.
인풋 문자열의 길이가 함께 주어진다.
공간복잡도는 고려하지 않는다.
#include <iostream>
char* TransString(char input[], int length);
int main() {
char input[] = {'c','d',' ','a',' ','e','h','\0'};
printf("%s\n", TransString(input, 8));
}
char* TransString(char input[], int length){
int transLength = 0;
for (int i = 0; i < length; i++) {
if (input[i] == ' ') transLength += 3;
else transLength += 1;
}
char* output = new char[transLength];
char* iter = output;
for (int i = 0; i < length; i++) {
printf("%d\n", iter);
if (input[i] != ' ') {
*iter = input[i];
iter += 1;
}
else {
*iter = '%';
iter += 1;
*iter = '2';
iter += 1;
*iter = '0';
iter += 1;
}
}
printf("%c\n", output[transLength - 1]);
return output;
}
문자열의 문자들을 하나씩 읽어오며 카운트한다. 문자가 공백일 경우에는 +3을 한다.
카운트만큼의 크기를 가진 char배열을 생성한다.
입력문자열을 다시 하나씩 읽어오며 준비된 char배열에 그대로 입력한다. 공백일 경우 '%','2','0'을 순서대로 삽입한다.