Day 5
const getPrefix = strs => {
let prefix = '';
if (strs[0]) {
for (let i=0; i < strs[0].length; i++) {
let sameCount = 0;
for (let j = 1; j < strs.length; j++) {
if (strs[0][i] === strs[j][i]) {
sameCount++;
}
}
if(sameCount === strs.length-1)
prefix += strs[0][i];
else break;
}
}
return prefix;
}
접근방법
- 빈 문자열을 선언( let prefix )하고 반복문을 돌려서 strs 배열안의 문자열들의 겹치는 알파벳을 순차적으로 prefix에 넣어주고 for문이 다 돌면 prefix 값을 리턴해서 결과값 출력
- 첫번째 for문의 i는 strs 배열 안의 문자열 각각의 인덱스(알파벳)을 나타낸다.
- 두번째 for문의 j는 strs 배열 안의 각 인덱스(문자열)을 나타낸다. strs의 0번째 인덱스부터 for문에서 돌릴 필요 없이 strs의 0번째 인덱스를 나머지 인덱스와 비교해서 겹치는 값을 찾아내면 되기 때문에 j=1번째 인덱스부터 시작
- 첫번째 for문에서 sameCount 변수를 선언 및 초기값을 1로 설정. 해당 변수는 두번째 for문 안에서 두 문자열의 인덱스가 일치하면 +1을 해준다. strs의 0번째 인덱스를 나머지 인덱스들과 비교하는 것이기 때문에 strs 배열안의 모든 문자열에서 해당 인덱스의 알파벳이 일치할 경우 sameCount의 값은 비교대상인 str[0]을 제외한 "strs.length-1"이 됨
- if문에서 sameCount의 값과 strs.length-1이 같은 지 비교한다. sameCount의 값과 strs.length-1의 값이 같다는 것은 strs[0]을 strs의 나머지 인덱스들과 비교했을 때 해당 알파벳이 모두 같았다는 말이 되므로 해당 알파벳을 prefix에 넣어준다. for문이 돌아가면서 strs의 인덱스들을 비교, 겹치는 알파벳은 순차적으로 prefix에 들어가므로 for문 종료 후 리턴되는 prefix의 값은 strs배열안의 모든 인덱스들을 비교해서 겹치는 알파벳의 모음이 된다.
- if문 밑에 else로 break를 선언해주지 않으면 strs 내 인덱스들의 i번째 알파벳이 겹치지 않아도 prefix에 값이 추가되지 않을 뿐 for문에서 다음 알파벳(i+1)을 비교하게 되기 때문에 겹치지 않는 알파벳이 발생 시 break로 종료시킨다.
느낀 점 ****
월~금요일 동안 매일 한 문제씩 알고리즘 기초 문제들을 풀어보았는데 문제를 읽으면 어떻게 풀어야할 지 감이 오는데 막상 코드로 구현하는 것은 꽤나 힘들다. 코드카타 외에도 매일 한문제씩은 알고리즘 문제를 따로 찾아서 풀어보는 것이 좋을 것 같다. 메소드 잘 사용해서 같은 답안도 코드 줄이는 것은 덤