본문 바로가기

Algorithm(Javascript)

알고리즘 문제 6

 

로마 문자열을 받으면 숫자로 바꿔주는 문제이다. 일단 문자열에 따른 숫자를 대칭시켜주는걸 객체로 관리를 해줘야된다.

로마 문자열을 숫자로 읽는법은 왼쪽부터 차례대로 더해주는데 대신 조건은 앞에 있는 문자가 뒤에 있는 문자보다

크거나 같을때 더해주는거다. 만약 만약에 있는 문자가 뒤에 있는 문자보다 작다면 그 문자열의 값은 빼줘야 된다.

 

function romanToNum(s) {
  const numberSymbol = {
    I: 1,
    V: 5,
    X: 10,
    L: 50,
    C: 100,
    D: 500,
    M: 1000,
  }
  const box = s.split('');
  let num = 0;
  for (let i=0; i<box.length; i++) {
    if (i === box.length - 1) {
      num += numberSymbol[box[i]]
      break;
    }
    if(numberSymbol[box[i]] < numberSymbol[box[i+1]]) {
      num -= numberSymbol[box[i]]
    } else {
      num += numberSymbol[box[i]]
    }
  }
  return num
}

 numberSymbol이란 변수에다가 각각의 문자열에 따른 값을 key, value형태로 넣어준다. 그리고 box변수에는 파라미터로 받은

로마 문자열을 split()으로 쪼개서 배열로 할당한다. 답으로 반환해줄 값은 num이라고 하고 초기값 0을 할당해준다.

 

box의 0번 인덱스부터 끝까지 현재 인덱스 숫자와 다음 인덱스 숫자랑 비교하면서 num에다가 값을 더해줄지 빼줄지 결정하는 

코드를 작동하는데 만약 마지막 인덱스의 문자열이 들어오면 해당 문자열 숫자는 무조건 더해준다.

왜냐하면 마지막 문자열은 비교대상이 없기때문에 더해주고 반복문을 탈출하는 break를 걸어줘야한다.

만약 안걸어주면 다음 if else문이 작동하면서 오류가 날거다. 이렇게해서 더해주고 빼주는 반복문이 끝나게되면 숫자 num을 

반환하면서 함수는 종료된다.

 

'Algorithm(Javascript)' 카테고리의 다른 글

알고리즘 문제 8  (0) 2021.10.27
알고리즘 문제 7  (0) 2021.10.26
알고리즘 문제 5  (0) 2021.10.22
알고리즘 문제 4  (0) 2021.10.21
알고리즘 문제 3  (0) 2021.10.20