이번 문제는 단 하나의 조건을 풀지 못하고 끝마쳤던 문제였다.
strs은 단어가 담긴 배열입니다. 공통된 시작 단어(prefix)를 반환해주세요.
예를 들어 strs = ['start', 'stair', 'step'] return은 'st'
strs = ['start', 'wework', 'today'] return은 ''
const getPrefix = strs => {
let strings = strs[0];
if(strs.length === 0){
return '';
}
for(let i=0; i<strs.length; i++){
for(let j=0; j<strings.length; j++){
if(strs[i][j] !== strings[j]) {
strings = strs[i].slice(0,j);
}
}
}
return strings;
}
getPrefix(['start', 'stair', 'step']);
배열의 첫 데이터와 다음 배열의 데이터를 비교해서
데이터가 일치하지 않으면, 일치하는 부분까지만 데이터를 뽑아내겠다
이런 방식으로 작전을 짜고 코드를 괴롭히러 갔다.
const getPrefix = strs => {
// const strings = strs[0];
let strings = strs[0];
if(strs.length === 0){
return '';
}
}
처음부터 실수를 했는데, 배열의 첫 데이터를 지정해 줄 때,
const를 사용해줬더니 오류가 발생했다.
그리고 let으로 바꿔서 다시 사용했더니 오류가 사라졌다.
배열의 데이터는 항상 바뀔 수 있는 데이터인데,
const로 고정시켜 놓으면 오류가 날 만도 하다.
배열에 데이터가 없는 경우도 있겠다 싶어
if로 데이터가 없는 경우를 작성해줬다.
const getPrefix = strs => {
// const strings = strs[0];
let strings = strs[0];
if(strs.length === 0){
return '';
}
for(let i = 0; i < strs.length; i++) {
for(let j = 0; j < strings.length; j++) {
if(strs[i][j] !== strings) {
}
}
}
}
배열의 데이터를 하나씩 비교하기 위해선 반복문을 사용하는 것이
효과적이라고 판단했다. 그래서 사용한 것이 이중 for문.
이중 for문을 사용해준 이유가 있는데,
배열 모양을 요렇게 👉 [ ][ ] 사용해서 배열 안의 데이터에 접근 가능
하기 때문이다.
(이걸 이제 알았다. 우연찮게 알게 되었는데 역시,
이번에도 최초 발견자는 내가 아니었구요.)
strs[i][j]는 배열의 글자 하나씩에 접근 가능하고,
strings는 배열의 첫 데이터를 가리키게 설정해줘서
배열의 첫 단어와 다음에 올 단어가 같지 않다면 이라는
조건을 맞춰줬다.
const getPrefix = strs => {
// const strings = strs[0];
let strings = strs[0];
if(strs.length === 0){
return '';
}
for(let i = 0; i < strs.length; i++) {
for(let j = 0; j < strings.length; j++) {
if(strs[i][j] !== strings) {
strings = strs[i].slice(0,j);
}
}
}
return strings
}
조건이 맞다면 slice를 이용해 잘라낸 단어로 첫 단어를 만들어주고
배열의 첫 단어인 strings를 리턴해줬다.
조건이 맞지 않아 코드가 통과되지 않았다.
어떤 부분에서 실수를 했을까 둘러보다 깨달았다.
조건을 줄 때, 단어 하나 하나를 비교해줬어야 했는데
내가 작성한 코드는 단어 !== 글자를 의미했으니
코드가 통과되지 않은 것이 당연했다.
strings의 글자 하나하나를 보기 위해서 for문의 j를 이용해줬다.
(strings 자체가 이미 단어를 가리키고 있으니,
단어 안을 순회하는 for문의 j를 사용해줘
글자 !== 글자 조건을 만들어준 것이다.)
const getPrefix = strs => {
// const strings = strs[0];
let strings = strs[0];
if(strs.length === 0){
return '';
}
for(let i = 0; i < strs.length; i++) {
for(let j = 0; j < strings.length; j++) {
if(strs[i][j] !== strings[j]) {
strings = strs[i].slice(0,j);
}
}
}
return strings
}
그리고 코드 통과를 요청해봤더니 해결되었다.