strs은 단어가 담긴 배열입니다. 공통된 시작 단어(prefix)를 반환해주세요.
예를 들어 strs = ['start', 'stair', 'step'] return은 'st'
strs = ['start', 'wework', 'today'] return은 ''
const getPrefix = strs => {
let prefix = strs[0];// ➊ 비교할 대상을 정한다.
if(strs.length === 0){ // ➌ strs가 아예 없을때 ''를 반환.
prefix = '';
}
for(let i = 1; i < strs.length; i++){// ➋ 비교할 대상을 제외한것을 비교함.
while(strs[i].indexOf(prefix) == -1){
prefix = prefix.substring(0,prefix.length-1)
}
}return prefix;
}
➋ 번에서 prefix가 str[i]에 없다면,
prefix에서 substring()메서드를 통하여 한글자씩잘라주며,계속해서 비교해준다.
prefix에는 하나씩 잘린 값이 계속 담겨지면서 공통된 단어만 남기게 된다.
➌ 번은 사실 안써줘도 될거같다고 생각했는데, 만약에 인자에 빈 배열이 담기게된다면,
문제에서 원하는 ''가 아닌 , undefined 가 출력되는것을 알 수 있었다.
여기서 왜 while문 위에 if문을 넣어줬는지 의문이어서
while문이 끝나고 리턴된 다음에 넣어줬더니
똑같이 undefined 가 출력되었다.
내 생각에 if문을 아래에 쓰게되면 또 리턴을 해줘야 하는데,
이미 위에서 해줬기 때문에 안먹히는것 같다..
저번 문제에서도 리턴을 어디다 해줘야 하는지 잘 인지를 못했었는데
한번 더 생각해 볼 수 있었다..
로마자에서 숫자로 바꾸기
1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환해주세요.
로마 숫자를 숫자로 표기하면 다음과 같습니다.
로마자를 숫자로 읽는 방법은 로마자를 왼쪽부터 차례대로 더하면 됩니다.
III = 3 XII = 12 XXVII = 27 입니다.
그런데 4를 표현할 때는 IIII가 아니라 IV 입니다.
뒤의 숫자에서 앞의 숫자를 빼주면 됩니다. 9는 IX입니다.
I는 V와 X앞에 와서 4, 9 X는 L, C앞에 와서 40, 90 C는 D, M앞에 와서 400, 900
function romanToNum(s) {
let num ={ // 객체로 만들어 key와 value 값으로
I:1, // 접근하기 편하게 만들어 줌.
V:5,
X:10,
L:50,
C:100,
D:500,
M:1000
}
let sum = 0; // 임의로 담을 값을 0으로 정해 줌.
for(let i=0;i<s.length;i++){
if(num[s[i]] < num[s[i+1]]){
sum -= num[s[i]]; // ➊ -1
}else{
sum += num[s[i]]; // ➋ +5 => 4
}
}return sum;
}
romanToNum('IV') // 4
여기서 인자가 'IIIV' 라면, sum에 -3이 담기고,
s[3]번째 돌때 else로 넘어가 +5가 되어 2가 리턴이 되어야한다고 생각하는데,
왜 6이 리턴이 되는건지 의문이다..
리턴값만 보고 생각이 든건, 딱 앞뒤로만 비교해줘서 6이나오는거같은데
for문에서 s[1]을 돌때, 도대체 어떻게 넘어가는걸까...?