본문 바로가기
  •  오묘와 함께 살아가는 집사의 연구노트
코딩공부

LeetCode easy 14번 Longest Common Prefix 문제 C언어 풀이

by 오묘집사 2021. 11. 21.
728x90
반응형

안녕하세요 오묘집사입니다.

 

역시 코딩공부 내용 끄적여보는 중입니다.

 

이번엔 문자열 배열 중에서 공통된 단어를 앞에서부터 찾는 문제였습니다.

공통단어가 없다면 공백으로 출력하구요.

예를들어 ["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"이 나오겠죠.

 

만약 공통 접두사가 없다면 ""이 나오게 됩니다.

 

문제가 간단해보이면서도 어렵군요

아직 갈길이 멉니다 ㅠㅠ

반응형

댓글