Code Kata#7

Hyunjun Kim
akiakma
Published in
2 min readMay 7, 2020

#문제
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. result =0; 을 초기화해줍니다.
  2. roman이라는 객체를 만들어줘서 key값에는 로마자를 value에는 숫자를 넣어줍니다. 로마자를 넣으면 숫자로 환산할수있게 개체를 만드는것입니다.
  3. 반복문을 만듭니다. 반복문은 인자로 들어오는 string(로마자)의 인덱스0부터 마지막까지 반복될것입니다.
  4. currentNum에는 roman의 0인덱스부터 시작합니다. nextNum은 인덱스 1부터 시작할것입니다. 이유는 4,9 & 40,90… 때문입니다.
  5. if 조건문은 currentNum이 nextNum보다 작을경우 result값에 마이너스를 해주고 그외의 상황에는 result = result + currentNum을 해주는것입니다.

예외사항이 없다면 엄청 쉽겠지만, 예외상황이 있기 때문에 조금 까다롭게 느낄 수도 있습니다. 코드카타를 하면서 느끼는것은 코드를 짜는 어려움보다 예외사항을 어떻게 풀어나가느냐..가 더 어려운것같습니다. 결국 4와9를 해결하기위해서는 그 앞의 숫자들을 미리 빼주면서 연산하는 방식으로.. 진행해야합니다.

또다른 방법.

--

--