오늘의 문제는 풀릴 것도 같은 느낌인데 너무 어렵게 생각하느라 풀리지가 않았다... 1시간이 지나서 답을 보고 해석을 해야겠다.
strs은 단어가 담긴 배열입니다. 공통된 시작 단어(prefix)를 반환해주세요.
예를 들어 strs = ['start', 'stair', 'step'] return은 'st'
strs = ['start', 'wework', 'today'] return은 ''
문자를 처음부터 slice 하면서 for문을 이용하여 하나씩 증가하여 같은 문자열이 나오지 않는다면 종료를 하는 방법을 생각했는데 구현이 안되었다...
빈 문자열 prefix를 선언한다.
let prefix = ""
if문을 사용하여 strs 의 값이 null이거나 배열에 담긴 문자 열이 없다면 prefix를 return 한다.
if(strs === null || strs.length === 0) {
return prefix;
}
str[0]
의 값을 i 로 증가 시킬 수 있도록 선언한다. (첫번째 문자열의 길이만큼만 비교하면 되기 때문이다.) for (let i = 0; i < str[0].length; i++) {
const char = strs[0][i];
for (let j = 1; j < str.length; j++)
str[j][i]
의 값이 char 과 일치하지 않을 때 prefix로 return 을 한다. if(strs[j][i] !== char) {
return prefix
}
prefix = prefix + char`
}
return = prefix
strs의 값이 null도 아니고 str.length의 값이 0 이 아니기 때문에 for문으로 이동한다.
s가 시작될 때 for문에서 char = strs[0][0] = "s"
이고 두번째 for문의 if문에서 (strs[1][0], strs[2][0] = "s") === char
이므로 prefix를 리턴하지 않고 두번째 for문 바깥에 있는 prefix = prefix + char
로 진행한다.
prefix = (prefix = "") + (char = "s")
t가 시작될 때 for문에서 char = strs[0][1] = "t"
이고 두번째 for문의 if문에서 (strs[1][1], strs[2][1] = "t") === char
이므로 prefix를 리턴하지 않고 두번째 for문 바깥에 있는 prefix = prefix + char
로 진행한다.
prefix = (prefix = "s") + (char = "t")
a가 시작될 때 for문에서 char = strs[0][2] = "a"
이고 두번째 for문의 if문에서 (strs[1][2] = 'a') === char
이나 strs[2][1] = "e") !== char
이므로 prefix = "st"
를 리턴한다.
strs의 값이 null도 아니고 str.length의 값이 0 이 아니기 때문에 for문으로 이동한다.
s가 시작될 때 for문에서 char = strs[0][0] = "s"
이고 두번째 for문의 if문에서 (strs[1][0] = w), (strs[2][0] = "s") !== char
이므로 prefix= ""
를 리턴한다.
const getPrefix = strs => {
let prefix = ""
if(strs === null || strs.length === 0) return prefix
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 prefix
}
}
prefix = prefix + char
}
return prefix
}
오늘 문제는 어떻게 풀어야할지 생각하기가 너무 까다로웠다는 생각이 들었다.
처음 slice를 사용하려하였지만 너무 어렵게 생각하였고 좀 더 쉽게 풀 수 있는 생각을 해야겠다는 마음이 들었다.
다음에 풀 때는 뭔가 값을 먼저 들어가는 것보다 값을 안넣었을 때 결과 값이 편하게 나오는 것부터 생각하고 그 다음에 본격적으로 return 될 수 있는 값을 생각해야겠다.
또 다시 중복 for문을 사용하는 문제가 나왔으며 for 안에서 변수 선언하는 것과 다음 for문에서는 if 문안에 for문을 멈추고 싶을 때 return 하는 방법에 대한 기본적인 방법을 아는 흐름이 중요하다고 느꼈다.
참고 및 출처
https://dev.to/urfan/leetcode-longest-common-prefix-with-javascript-32ca