본문 바로가기
기초다지기/JS 코딩테스트

javascript 주어진 문자열 배열중 접두사 찾기

by 김빵그 2023. 10. 23.

 

 문제 

주어진 무자열 배열에서 가장 긴 공통 접두사는 찾는 것 (접두사란 ? 모든 문자열 동일한 문자열의 시작부분)

코드 풀이 

var longestCommonPrefix = function(strs) {
    if (strs.length === 0) {
        return "";
    }
    for(let i = 0 ; i < strs[0].length; i++ ){
        const char = strs[0][i];
        for(let j = 1; j < strs.length; j++) {
           if (strs[j][i] !== char) {
                return strs[0].slice(0, i);
            }
        }
    }
     return strs[0];
};


///
Input: strs = ["flower","flow","flight"]
Output: "fl"
  • 문자열 배열중 첫번째 문자열을 가지고 와 (strs[0]) 다른 문자열과 비교하는 코드를 짜보았다
  • for 루프를 사용하여 첫 번째 문자열 strs[0]의 길이만큼 반복한다
  • char 변수는 현재위치 i에서의 문자를 나타낸다 [f/l/o/w/e/r...]
  • 다음 for 루프는 사용하여 나머지 문자열과 비교한다 
  • strs[j][i]와 char가 다른 경우 strs[0]의 첫번째 위치에서 현재 위치 i전까지 잘라내어 반환한다

  • 어찌저찌 풀긴했지만 런타임이... ! 
  • 리팩토링을 생각하다 너무 안풀려 chat gtp 힘을 빌려 .. 어찌저찌 해결

리팩토링

function longestCommonPrefix(strs) {
    if (strs.length === 0) {
        return "";
    }

    strs.sort(); // 문자열을 사전순으로 정렬

    const firstStr = strs[0];
    const lastStr = strs[strs.length - 1];
    let commonPrefix = "";
    const minLength = Math.min(firstStr.length, lastStr.length);

    for (let i = 0; i < minLength; i++) {
        if (firstStr[i] === lastStr[i]) {
            commonPrefix += firstStr[i];
        } else {
            break;
        }
    }

    return commonPrefix;
}
  • 주어진 문자열 배열 strs 길이가 0인 경우 ""' 빈 문자열을 반환
  • 비슷한 문자열끼리 묶는 선작업을 한다
  • 정렬된 배열에서 첫번째 문자열을 firstStr에 저장하고 마지막 문자열을 lastStr에 저장한다
  • commonPrefix 변수를 초기화 한다
  • minLength 변수에 두 문자열 간의 최소 길이를 저장한다
  • 반복문을 사용하여 두 문자열의 각 문자를 비교하고 동일한 경우 commonPrefix 문자열에 해당하는 문자를 추가한다
  • 두 문자열중 하나라도 다른 문자가 나타날시 멈춘다

 


아무리 봐도 처음 코드가 .. 좀 더 눈에 잘 들어오는데 .. 왜지 .. 왜때문에 아래코드가 실행시간이 더 짧지... 처음문자열과 마지막 문자열을 비교해서 그런건가