본문 바로가기

문제 풀기/코딩인터뷰

[코딩인터뷰 완전정복] 1.3 URLify

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'을 순서대로 삽입한다.