CK week2 day1
🧨 문제
로마자 숫자 표기로 문자열이 들어왔을 때,
그것을 숫자(1~3999)로 반환하는 함수를 만들어라
Symbol | Value |
---|---|
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
로마자로 숫자로 표기 할 때는,
Symbol에 대응하는 기호의 갯수 만큼 value를 갖게 된다.
ex) III
= 3, XX
= 20, DCL
= 650
그러나
4, 40, 400는
IIII
,XXXX
,CCCC
가 아닌IV
,XL
,CD
으로, (5-1, 50-10, 500-100) 표기 한다.
9, 90, 900는
VIIII
,LXXXX
,DCCCC
가
아닌IX
,XC
,CM
으로 (10-1, 100-10, 1000-100) 표기 한다.
s = III
->3
반환,
s = IX
->9
반환,
s = MCMXCIX
-> 1999 반환
🎯 내 풀이
def roman_to_num(s):
#step1
romans = ['I', 'V', 'X', 'L', 'C', 'D', 'M', 'F']
nums = [1, 5, 10, 50, 100, 500, 1000, 5000]
result = 0
#step2
for i in range(len(romans)):
result += s.count(romans[i]) * nums[i]
#step3
if i % 2 == 0 and i < 6:
forth = romans[i] + romans[i+1]
ninth = romans[i] + romans[i+2]
result -= s.count(forth) * nums[i] * 2
result -= s.count(ninth) * nums[i] * 2
return result
def roman_to_num(s):
#step1
romans = ['I', 'V', 'X', 'L', 'C', 'D', 'M', 'F']
nums = [1, 5, 10, 50, 100, 500, 1000, 5000]
result = 0
#step2
for i in range(len(romans)):
result += s.count(romans[i]) * nums[i]
#step3
if i % 2 == 0 and i < 6:
forth = romans[i] + romans[i+1]
ninth = romans[i] + romans[i+2]
result -= s.count(forth) * nums[i] * 2
result -= s.count(ninth) * nums[i] * 2
return result
📍 step 1
def roman_to_num(s):
romans=['I', 'V', 'X', 'L', 'C', 'D', 'M', 'F']
nums = [1, 5, 10, 50, 100, 500, 1000, 5000]
result = 0
로마 기호를 담을 romans
,
기호에 대응 하는 숫자를 담을 nums
결과를 담을 result
선언
📍 step 2
for i in range(len(romans)):
result += s.count(romans[i]) * nums[i]
로마자 표기로 들어온 입력s
에 있는
특정 로마자 기호의 갯수를
그 기호에 해당하는 수와 곱해 result
에 더한다.
📍 step 3
for i in range(len(romans)):
result += s.count(romans[i]) * nums[i]
if i%2==0 and i<6:
forth = romans[i] + romans[i+1]
ninth = romans[i] + romans[i+2]
result -= s.count(forth) * nums[i] * 2
result -= s.count(ninth) * nums[i] * 2
return result
4, 9, 40, 90, 400, 900 (예외적인 숫자) 에
해당하는 (IV
,IX
, XL
, XC
, LC
,LM
)이 들어오면,
(I, X, L
에 해당 하는 숫자) 를
result
에서 뺀다
만약 예외적인 숫자가 들어오지 않으면, `s.count(forth)`나 `s.count(ninth)` 는 0이 됨으로 `result`에서 아무것도 빼지 않는다. 최종적으로 구해진 `result`에서 반환한다.
를 하는 이유
- 앞에서 잘못 더해준 (
I, X, L
)을 한 번 빼준다 - 로마자 표기에서
I,X,L
이 , 단위 숫자 앞에 오면,I, X, L
에 해당하는 숫자를 빼서 숫자를 표기 하기 때문
🧵 예시
XCIX
= 99
step 2에서
result
는
을 계산해서
이 된다.
step3
그런데 XC
, IX
의 경우 (100 - 10, 10 - 1)
이 되어야 함으로,
먼저 앞서 잘못 더한 X
, I
에 해당하는 10, 1을 한번 씩 빼주어야 한다
그런 다음 올바른 답을 도출하기 위해 X
, I
를 한 번씩 더 빼주어야 한다.
Author And Source
이 문제에 관하여(CK week2 day1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bufflect/CK-week2-day1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)