https://programmers.co.kr/learn/courses/30/lessons/81301
function solution(s) {
if(s.length <3){
return Number(s)
}
const result = [];
const sList = s.split("");
let pointer = 0;
// sList를 한번 훑고 싶은데 continue를 연속으로 하고싶어서 pointer변수 이용
while (pointer <= sList.length - 1) {
const numChecker = Number(sList[pointer]);
if (numChecker || numChecker === 0) {
result.push(sList[pointer]);
pointer += 1;
} else {
if (sList[pointer] === "z") {
result.push("0");
pointer += 4;
} else if (sList[pointer] === "o") {
result.push("1");
pointer += 3;
} else if (sList[pointer] === "t") {
pointer += 1;
if (sList[pointer] === "w") {
result.push("2");
pointer += 2;
// else 안써줌 예외나올경우 확인
} else if (sList[pointer] === "h") {
result.push("3");
pointer += 4;
}
else{
pointer += 40
}
} else if (sList[pointer] === "f") {
pointer += 1;
if (sList[pointer] === "o") {
result.push("4");
pointer += 3;
// 예외나올경우확인
} else if (sList[pointer] === "i") {
result.push("5");
pointer += 3;
}else{
pointer += 40
}
} else if (sList[pointer] === "s") {
pointer += 1;
if (sList[pointer] === "i") {
result.push("6");
pointer += 2;
} else if (sList[pointer] === "e") {
result.push("7");
pointer += 4;
}
} else if (sList[pointer] === "e") {
result.push("8");
pointer += 5;
} else if (sList[pointer] === "n") {
result.push("9");
pointer += 4;
}
}
}
return Number(result.reduce((acc, v) => acc + v, 0));
// var answer = 0;
// return answer;
}
포인터라는 변수를 썼던 아이디어는 이랬다.
for를 써서 문자열을 훑어야하는데 숫자일 경우에는 바로 리턴하는 배열에 추가하면 되지만 영단어일경우 그 영단어만 가지고 있는 고유의 문자열을 알면 다음 숫자나 다음 영단어로 가고 싶었다.
예를 들어 영단어에서 처음이 t가 나올경우 2가지 영단어가 나올 수 있다. two와 three 그래서 t다음 영단어를 보면 two인지 three인지 인식할 수 있다.
하지만 for문을 쓰면 continue를 해서 다음으로 넘어가야되는데 continue를 2번이상 연속해서 써서 다른 숫자나 영단어로 갈 수 없기때문에 pointer를 변수로 놓고 continue를 마치 연속으로 쓰는 것 처럼 구현하였다.
예를 들어 z가 나올경우 z는 zero밖에 없으므로 리턴하는 배열에 0을 추가하고 pointer가 4번 이동하면 다음 숫자나 영단어로 넘어간다
따라서 이렇게 pointer로 변수를 두면 continue를 마치 연속으로 쓰는 for문이 되게 할 수 있다.