[TIL]_Code Kata (#6)

quokka·2021년 10월 25일
0

Algorithm - codekata

목록 보기
4/6
post-thumbnail

🌈 문제 해결능력 기르기


🌀 문제

로마자에서 숫자로 바꾸기

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

Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
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


🌝 내가 작성한 코드

function romanToNum(s) {
  // 여기에 코드를 작성해주세요.
  let result = 0;
  const roman = {
    I: 1,
    V: 5,
    X: 10,
    L: 50,
    C: 100,
    D: 500,
    M: 1000
  };
  // 1. 로마자마다 숫자 대입시켜준다. 

  for(let i=0; i<s.length; i++){
 }
};

👉 처음 문제를 읽고 나서 아직 로마자에 숫자를 대입하는 객체를 만들고 for문을 돌리는 단계까지 밖에 이해하지 못했다.😱 😭

✏️ 설명 들은 정답 코드

function romanToNum(s) {
  // 여기에 코드를 작성해주세요.
  let result = 0;
  const roman = {
    I: 1,
    V: 5,
    X: 10,
    L: 50,
    C: 100,
    D: 500,
    M: 1000
  };
  // 1. 로마자마다 숫자 대입시켜준다. 
  for(let i=0; i<s.length; i++){
    //2. 로마자를 for문을 돌려서 한자씩 돌린다. 
    let currentNum = roman[s[i]];
    //currentNum이라는 변수에 인자로 들어온 로마자와 대입되는 숫자를 할당시켜준다. 
    let nextNum = roman[s[i+1]];
    //nextNum이라는 변수에 인자로 들어온 다음 인자의 로마자와 대입되는 숫자를 할당시켜준다.
    if(currentNum < nextNum) {
      result = result - currentNum
      //curretNum이 nextNum보다 작다면 result에서 currentNum을 뺀다. 
    }
    else {
    result = result + currentNum
    // 그게 아니라면 result에 currentNum을 더해준다. 
    }
  }
  return result;
}

romanToNum('XXIV');

✅  해설을 듣고 알게된 점
👉 currentNum이라는 변수에 인자로 들어온 로마자와 대입되는 숫자를 할당시켜준다.
👉 nextNum이라는 변수에 인자로 들어온 다음 인자의 로마자와 대입되는 숫자를 할당시켜줘야한다.
👉 currentNum이 nextNum보다 작다면 result에서 currentNum을 뺀다.
👉 그게 아니라면 result에 currentNum을 더해준다.

profile
👩🏻‍💻 매일매일이 기대되는 개발자 ^^

0개의 댓글