프로그래머스 숫자 문자열과 영단어

김금동·2021년 11월 12일
0

알고리즘

목록 보기
12/12

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문이 되게 할 수 있다.

profile
나원래chu해

0개의 댓글