Error#4. break

깡통·2024년 2월 10일
0

  • 나는 결과 값을 1478로 예상했는데, 실제 결과는
o

하나만 찍히고 끝난다.

  • 그 이유는, break의 특성에 있는데, 가장 가까운 '코드블럭'을 탈출하는게 아니라, 가장 가까운 '반복문의 코드블럭'을 탈출하는 것이기 때문이다.

  • '무조건' 가장 가까운 반복문을 탈출한다!

이 것의 결과는

number1 o
number1 on
number1 one
answer1 4
number1 ones
number1 onese
number1 onesev
number1 oneseve
number1 oneseven
answer1 47
number1 onesevene
number1 onesevenei
number1 oneseveneig
number1 oneseveneigh
number1 oneseveneight
answer 47

이렇게 나오는데, 그 이유는 break로 인해 number 변수가 orders객체의 모든 key와 비교되지 못하고, 딱 첫번째 key하고만 비교된 뒤 break 타고 바로 탈출해 버리기 때문이다.

그 증거로 매개변수에 인수를

solution("one4seven7eight");
대신
solution("zero4seven7eight");
를 넣으면

--------------
number1 z
number1 ze
number1 zer
number1 zero
answer2 0 << 바로 이 분!
---------------
number2 
answer1 04
number1 s
number1 se
number1 sev
number1 seve
number1 seven
answer1 047
number1 sevene
number1 sevenei
number1 seveneig
number1 seveneigh
number1 seveneight
answer 047

order객체의 첫번째 프로퍼티 key인 zero와는 성공적으로 비교되어 0이 나오나, 그 다음 부터는 첫번째 프로퍼티 zero와만 비교되고 탈출되기 때문에 숫자로 변환되어 나오지 않는 것을 볼 수 있다.

  • 따라서, break는 가장 가까운 반복문을 탈출하는 것이 맞다!

  • 그 동안 break가 이해가 될랑 말랑 하면서 알쏭달쏭했는데, 오늘 확실하게 이해했다, 기분이 좋군.

  • 다른 사람의 답변

Javascript

function solution(s) {
    let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
    var answer = s;

    for(let i=0; i< numbers.length; i++) {
        let arr = answer.split(numbers[i]);
        answer = arr.join(i);
    }

    return Number(answer);
}
  • 우선, 배열이 시작하는 인덱스(0)와 배열의 첫번째 인덱스(0)의 요소가 zero(0)로 똑같기 때문에 가능한 로직이다.

  • 그 후 해당 숫자를 칭하는 단어를 기준으로 하여 문자열을 배열로 쪼개면서, 해당 단어를 문자열에서 소멸시킨다.

  • 이후, join 메서드를 사용해 쪼개진 배열들 사이에 소멸된 단어를 칭하는 숫자를 넣어서 다시 서로 붙여 잇는다. 이러면 사라진 단어의 자리마다 그 단어의 뜻을 가진 숫자가 들어가게 된다('1zero1zero1zero' >>> [1,1,1] >>> 101010 // 참고로 join은 마지막으로 기준이 된 문자열 다음에 문자열이 존재하지 않으면, 배열에 빈칸을 반환한다.
    ex) var answer = '1zero1zero1zero' 를 아래처럼 하면, answer.split('zero') >>> ['1','1','1',' '])

)

profile
코딩하러 온 사람입니다.

0개의 댓글