LeetCode -[로마에서 정수로] JS 변형

이것은 아마도 "쉽다"고 알려진 불이 켜진 LeetCode 문제 중 하나입니다. 이것은 확실히 쉽지는 않지만 몇 번의 시행 착오 끝에 "초보자 친화적"입니다. 나는 문제에 대한 전체 설명에 들어가지 않고, 당신이 왜 여기 있는지 안다고 가정하고 즉시 논의를 시작합니다. 이 문제에 대해 모르는 경우 here is the problem .

따라서 로마 정수는 소수의 영문자로 계산된다는 것을 알고 있기 때문입니다. 그것들은 I, V, X, L, C, D, M이며 각각은 연관된 숫자 값을 가집니다. 가장 먼저 할 일은 이 값을 객체에 저장하는 것입니다.

const romanD = {
          I: 1,
          V: 5,
          X: 10,
          L: 50,
          C: 100,
          D: 500,
          M: 1000,
    };


이제 문제는 로마 기호로 들어오는 임의의 입력(문자열)이 있다는 것입니다. 우리는 그것들을 요약해야 합니다. 예를 들어 입력이 'III'이면 I의 숫자 값이 1이므로 합계는 3이 됩니다. 따라서 'XV'는 15가 됩니다. 유일한 차이점은 입력 값 중 하나라도 다음 값보다 작은 값을 갖는 경우 덧셈이 아니라 뺄셈이라는 것입니다. 예를 들어,XL === 40 하지만 60는 아닙니다.

가장 먼저 하는 일은 의사 코드입니다. CS50 덕분에!

//store the roman value {}

//split the input

//have an accumulator variable

//run a loop over

//if the curInput < nextInput (substract) else (sum up)

//return or console.log the accumulator


이제 첫 번째 코드는 전통적인 ForLoop를 사용합니다. 이렇게 갑니다 -



자, 이것이 너무 추상화 된 경우 여기에 단순화 된 버전이 있습니다.



이것이 당신에게 꽤 자명하기를 바랍니다. 그렇지 않은 경우 댓글을 남겨주세요. 문제를 분석해 드리겠습니다.

이제 ForEach 루프를 사용한 또 다른 변형입니다. 이렇게 갑니다 -



이것이 다시 추상적인 경우 위의 단순화된 버전을 보십시오. 당신이 알고 있는 것은 단지 if..else 문일 뿐입니다. 배열을 제공하는 입력split() 이후 여기에서 forEach를 실행할 수 있었습니다. 예, 알아요. 언급하지 않았습니다. 다음은 완전한 코드입니다 ...



forLoop에서 실행 시간은 - 78 to 102ms 사이입니다.
forEach를 사용하면 실행 시간은 - 74 to 100ms 사이입니다.

하지만 컴퓨터의 하드웨어 품질이 이번에도 영향을 미칩니다.

좋은 웹페이지 즐겨찾기