[Code Kata] JavaScript #6

  1. 문제

    • 1~3999 사이의 로마숫자를 인자로 받아 아라비아 숫자를 return 하는 함수를 만드시오.

  1. 문제 해결 방법 구상

    1) 로마숫자: 아라비아숫자 의 형태로 구성된 객체 생성

    2) 입력받은 인자를 split 메소드를 이용해서 글자별로 자른 후, 인자의 로마자를 변수로 하여 객체를 호출 하는 방식으로 로마숫자에서 아라비아숫자로 치환.

    3) 연속된 로마자의 경우 왼쪽에 오는 수가 뒤에 오는수보다 작으면 뺄셈, 같거나 높을 경우에만 덧셈을 한 result 를 반환.
    ex) IX = 10-1, XI = 10+1


  2. 코드 작성

function romanToNum(s) { 
  const romanNum = {					// 객체 생성
    'I': 1,
    'V': 5,
    'X': 10,
    'L': 50,
    'C': 100,
    'D': 500,
    'M': 1000
  }
  let result = 0
  const romanArry = s.split(‘’);			// 받은 인자 한글자씩 나누기	
  const numArray = romanArry.map(x => romanNum[x]) 	// 로마숫자 한글자씩 아라비아 숫자로 치환
  for (i=0; i<numArray.length; i++){
    if (numArray[i] < numArray[i+1]) {			
      result -= numArray[i]				// 왼쪽수가 오른쪽 수보다 클때는 뺄셈
    } else {
      result += numArray[i]				// 왼쪽수가 오른쪽 수보다 같거나 클때는 덧셈
    }
  }
  return result
}

  1. 작성 후 느낀점

    1) 처음에 왼쪽에 오는 수가 작을 경우 해당 수를 음수로 전환하는 식으로 해보려고 했었는데 대입연산자를 쓰니 훨씬 간단해 진다는 것을 나중에 알았다. 대입연산자를 많이 사용해보지 않았는데, 생각보다 쓸데가 많을 것 같다

좋은 웹페이지 즐겨찾기