Code Kata #3

이상철·2021년 10월 3일
0

CodeKata

목록 보기
3/3
post-thumbnail

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

Symbol -> Value
I -> 1
V -> 5
X -> 10
L -> 50
C -> 100
D -> 500
M -> 1000

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

그런데 4를 표현할 때는 IIII가 아니라 IV 입니다. 뒤의 숫자에서 앞의 숫자를 빼주면 됩니다. 9는 IX입니다.

I는 V와 X앞에 와서 4, 9 X는 L, C앞에 와서 40, 90 C는 D, M앞에 와서 400, 900

내가 생각했던 접근 방법.

  1. 비교 대상을 만든다.
  2. 객체를 만들어서 비교한다.
  3. 반복문으로 비교해준다.
function romanToNum (s) {
    let output = 0;
    const symbol = {
   		I : 1,
		V : 5,
		X : 10,
		L : 50,
		C : 100,
		D : 500,
		M : 1000,
  	     }
     for(let i = 0; i < s.length ; i++ ) {
     	let now = symbol[s[i]];
        let next = symbol[s[i+1]];
        if( now < next ) {
         output = output - now
	}else {
          output = output + now 
        }
       }
	return output
    }

먼저 반복문으로 함수의 매개변수로 들어오는 배열을 순회하고,
객체 안에 값이 있는지 비교합니다.
그리고 만약 첫번째 요소가 두번째 요소보다 작다면 output 값에서 - 첫번째 요소를 해줘서 4,9 ,40,90 ,400,900 값을 나타낼 수 있게 해주고,
그게 아니라면 정상적으로 값을 출력하게끔 하는 식입니다.

profile
헤더부터 푸터까지!!!

0개의 댓글