Algorithm - 로마자 숫자로 바꾸기

rachel's blog·2021년 10월 25일
0

Algorithm

목록 보기
9/11
post-thumbnail

로마자에서 숫자로 바꾸기
1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환해주세요. 로마 숫자를 숫자로 표기하면 다음과 같습니다.

로마자를 숫자로 읽는 방법은 로마자를 왼쪽부터 차례대로 더하면 됩니다.
III = 3 , XII = 12 , XXVII = 27 입니다.

🥑 나의 풀이

  let arr = s.split('')

  let obj = {
    'I': 1,
    'V': 5,
    'X': 10,
    'L': 50,
    'C': 100,
    'D': 500,
    'M': 1000,
  }
  const newArr = arr.map(num => obj[num])

  let result = 0;
  for (let i = 0; i < newArr.length; i++) {
    if (newArr[i] < newArr[i + 1]) {
      result -= newArr[i];
    } else {
      result += newArr[i];
    }
  }
  return result
}
  1. 로마자 split으로 쪼개서 배열에 담기 (arr)
  2. array.map()을 이용해서 arr안에 각 요소들을 obj의 value값으로 반환받아 newArr에 담는다.
    ex) num = ['X', 'X', 'I'] ▶ obj['X'] = 10, obj['I'] = 1 ▶ newArr=[10, 10, 1]
  3. 반복문을 사용해서 바로 다음 인덱스와 값을 비교해서 이전값이 크면 더하고, 이전값이 더 작으면 빼준다. (4, 9, 40, 90, 400, 900 의 경우를 해결하기 위함)

📌 참고사항

  • 처음 접근 방식 : "배열을 순회하면서 배열의 인덱스 요소가 객체의 key 값과 일치하면 객체의 value값으로 반환해줘" 라고 접근하고 싶었다.
  • Object.keys("Object 객체명"); : key값만 반환할 수 있다.
  • Object.values("Object 객체명"); : value값만 반환할 수 있다.
  • 이 두가지를 이용해서 또 다른 배열에 넣고 인덱스끼리 비교해서 일치하면 배열의 요소를 바꿔주려고 했는데, 생각해보니, 또 다른 배열에 넣을 필요가 없었다. 이미 만들어져있는 객체를 활용해서 객체의 value값으로 할당을 해주면 내가 구현하고 싶었던 부분이 해소되었다.
profile
블로그 이전 : https://rachelslab.tistory.com/

0개의 댓글

관련 채용 정보