⚙️ 알고리즘/기타 문제 & 풀이

[C] 문자열 병합

dev_zoe 2020. 7. 18. 01:05
반응형

정렬되어 있는 알파벳(모두 소문자)으로 이루어진 문자열 word1과 문자열 word2을 merge 하여 answer 배열에 넣는 함수 solution을 작성하시오. word1과 word2내에서는 문자 중복이 없으며 word1과 word2간에 중복된 문자는 둘 중 하나만 answer 배열에 넣도록 한다.

 

입력:

abcxy

dcz

출력:

abcdexyz

 

입력:

abc

bcde

출력:

abcde

 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

char answer[20];
char* solution(char* word1, char* word2)
{
	int i = 0, idx1 = 0, idx2 = 0; //idx1: word1의 인덱스 idx2: word2의 인덱스
	// word1이나 word2가 끝날 때까지 비교하면서 answer에 넣음
	while (word1[idx1] != '\0' && word2[idx2]!='\0') {
	
		if (word1[idx1] < word2[idx2]) //word1[idx1]가 word2[idx2]보다 더 앞에 있을때
			answer[i++] = word1[idx1++];
		else if (word1[idx1]>word2[idx2]) //word2[idx2]가 word1[idx1]보다 더 앞에 있을 때
			answer[i++] = word2[idx2++];
		else { //같으면 둘 중 하나만 넣고(word1[idx1]) 그 다음 문자와 비교해야하므로 idx2도 증가
			answer[i++] = word1[idx1++];
			idx2++;
		}
	}
	// word1이 남아있으면
	while (word1[idx1] != '\0')
		answer[i++] = word1[idx1++];
	// word2이 남아있으면
	while (word2[idx2] != '\0')
		answer[i++] = word2[idx2++];
	answer[i] = '\0';
	return answer;
}

int main(void) {
	char word1[20], word2[20];
	scanf("%s", word1);
	scanf("%s", word2);

	printf("%s\n", solution(word1, word2));
}
반응형