안녕하세요 오묘집사입니다.
역시 코딩공부 내용 끄적여보는 중입니다.
이번엔 문자열 배열 중에서 공통된 단어를 앞에서부터 찾는 문제였습니다.
공통단어가 없다면 공백으로 출력하구요.
예를들어 ["apple", "appstore", "application"]
이 입력값이라면 출력값은
"app" 인거죠.
제가 직접적으로 풀다가 되게 신박한 풀이를 보고 그 풀이로 해답을 남깁니다.
char * longestCommonPrefix(char ** strs, int strsSize){
int i =1;
char *temp;
char* ptemp;
while(i<strsSize){
temp = strs[i];
ptemp = strs[i-1];
while((*temp == *ptemp)&&(*temp)&&(*ptemp)){
temp++;
ptemp++;
}
*temp = '\0';
i++;
}
return strs[strsSize-1];
}
포인터를 아주 잘 이용한 해답이었는데요.
만약 입력값이 strs = ["flow","flower","flight"] 라고 해봅시다.
temp는 처음에 strs[1], "flower"가 되겠죠.
그럼 *temp는 f가 됩니다.
배열의 첫번째 항목을 참조하고 있으니까요.
ptemp는 "flow"이고,
*ptemp는 역시 f가 되죠.
따라서 while문 조건문이 true이므로 temp++, ptemp++가 수행됩니다.
그러면 *temp는 두번째 항목, l을 참조하게 되겠죠.
그래서 또 temp++, ptemp++가 수행됩니다.
그럼 각각 o를 바라보게되죠.
이렇게 "flow"까지 이어나가다가,
while 조건문이 깨집니다.
그때 *temp 에 널문자를 넣어 strs[1]은 "flow"가 됩니다.
원래 "flower"였지만, 널문자를 넣어줌으로써 배열을 끝내버리게 되고,
"flow"가 되는 것이죠.
그러고나서 다음 배열에 같은 반복을 수행하면
결국 이 strs 라는 문자열 배열은 이렇게 됩니다. ["flow", "flow", "fl"]
그리고 return을 하면 "fl"이 나오겠죠.
만약 공통 접두사가 없다면 ""이 나오게 됩니다.
문제가 간단해보이면서도 어렵군요
아직 갈길이 멉니다 ㅠㅠ
'코딩공부' 카테고리의 다른 글
LeetCode easy 9번 Palindrome Number 문제 C언어 풀이 (0) | 2021.12.05 |
---|---|
LeetCode easy 13번 Roman to Integer 문제 C언어 풀이 (0) | 2021.11.20 |
Leet Code Easy 1번 Two Sum 문제 C언어 풀이 (0) | 2021.11.20 |
댓글