1. 나의 생각 흐름
let strs = ["start", "stair", "step"];
let first = strs[0].split(""); // s t a r t
let second = strs[1].split(""); // s t a i r
let third = strs[2].split(""); // s t e p
let Lfirst = first.length; // 5
let Lsecond = second.length; // 5
let Lthird = third.length; // 4
let answer = [];
let result;
let min = Math.min(Lfirst, Lsecond, Lthird);
console.log(min); // 4
for (let i = 0; i < min; i++) {
for (let j = 0; j < min; j++) {
if (strs[0][i] !== strs[j][i]) {
return "";
}
answer.push(strs[0][i]);
result = answer;
}
return result;
}
이런식으로 이중 for문을 이용해서 돌아가는 것을 확인하고 체크해서 answer에 push해서 값을 넣어주는 것을 생각했다. 하지만, 결과는 오류..
2. 다른 사람들의 코드
const getPrefix = strs => {
let prefix = strs[0];
if(strs.length === 0){return ""}
for(let i = 0; i < strs.length; i++){
for(let j = 0; j < prefix.length; j++){
if(strs[i][j] !== prefix[j]){
prefix = strs[i].slice(0,j);
}
}
}
return prefix;
}
문자열의 길이가 0일때는 리턴값을 ""이렇게 빈 문자열로 보내주고, 이중 for문을 사용해서 이렇게 문자의 값이 달라질 때 slice를 이용해서 문자열을 잘라서 앞의 부분까지만 출력되게 한다.
문자열.slice (start , end) => start부터 end전까지 문자열을 잘라준다.
function getPrefix(strs) {
if (strs.length === 0){return "";}
let prefix = strs[0];
for ( let i = 0; i < strs.length; i++ ) {
while ( strs[i].indexOf(prefix) !== 0 ) {
prefix = prefix.substring( 0 , prefix.length - 1);
}
}
return prefix;
}
여기서는 while문을 주의해서 봐야한다. strs 배열의 첫번째 값과 기준으로 삼은 prefix값을 비교하는 반복문이다. indexOf는 문자열을 찾아주는 메소드다. 여기에서 indexOf에 배열 strs의 첫번째 단어와 strs[i]의 값을 비교해준다. 당연히 같은 값이 없기에 "-1"을 반환한다. 그것은 while 조건문에서의 조건인 0과 일치하지 않기 때문에 while문의 조건을 만족해서 prefix값을 리턴해주고 다시 for문으로 들어가서 반복하게 되는 로직이다. ( prefix.length에 -1을 해주는 이유는 하나씩 잘라가면서 같은 동일한 문자열을 찾기 위함이다. )
문자열.indexOf(찾을 문자열, 위치)
string에서 특정한 문자열의 위치(index)를 반환한다.
탐색하려는 문자열이 존재하지 않는다면 -1을 반환한다.
문자열을 찾을 때 대소문자를 구분한다.
문자열.substring(start, end)
substring()함수는 substr() 함수와 같이 특정 문자열을 잘라내여 반환한다.
substr() 함수와 다른 점은 매개변수로 잘라내고 싶은 문자열의 start index와 last index를 전달한다.
substr() 함수와 마찬가지로 index는 0부터 시작한다.
3. 결론
이런 문제를 만났을 때, 어떤 식으로 접근하는 것이 좋을지 좀 더 생각해보는 것이 좋을 것 같다. 비슷한 유형은 이런 식으로 문제 접근하는 것이 좋을 것 같다.
'알고리즘' 카테고리의 다른 글
[CodeKata] Week 2 - Day 3 ( JavaScript ) (0) | 2022.02.26 |
---|---|
[CodeKata] Week 2 - Day 2 (JavaScript) (0) | 2022.02.26 |
[CodeKata] Week 1 - Day 4 ( JavaScript ) (2) | 2022.02.17 |
[CodeKata] Week 1 - Day 2 ( JavaScript ) (0) | 2022.02.15 |
[Programmars] K 번째 수 (JavaScript) (0) | 2022.02.15 |
댓글