
문제
주어진 무자열 배열에서 가장 긴 공통 접두사는 찾는 것 (접두사란 ? 모든 문자열 동일한 문자열의 시작부분)
코드 풀이
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 문자열에 해당하는 문자를 추가한다
- 두 문자열중 하나라도 다른 문자가 나타날시 멈춘다
아무리 봐도 처음 코드가 .. 좀 더 눈에 잘 들어오는데 .. 왜지 .. 왜때문에 아래코드가 실행시간이 더 짧지... 처음문자열과 마지막 문자열을 비교해서 그런건가
'기초다지기 > JS 코딩테스트' 카테고리의 다른 글
| javascript 문자열로 된 숫자들의 최대값과 최소값 (1) | 2023.10.24 |
|---|---|
| javascript 이차원배열의 덧셈 (0) | 2023.10.24 |
| javascript 정규식을 사용한 문자열 다루기 (0) | 2023.10.23 |
| javascript 두 정수 left, right 사이 정수들 약수 갯수와 덧셈 (0) | 2023.10.20 |
| javascript 주어진 길이 n에 따라 "수박" 패턴을 유지하는 문자열 생성하기 (0) | 2023.10.20 |