[Algorithm] 2주차 1번 문제

김상웅·2022년 6월 13일
0

[알고리즘]

목록 보기
5/18

📌 문제


로마자에서 숫자로 바꾸기 1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환하는 프로그램을 작성해주세요.

로마 숫자를 숫자로 표기하면 다음과 같습니다.

로마숫자아라비아숫자
I1
V5
X10
L50
C100
D500
M1000

로마자를 아라비아 숫자로 읽는 방법은 로마자를 왼쪽부터 차례대로 더하면 됩니다.

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



✅ 풀이


문제를 분석하면 다음과 같습니다.

인자로 받는 s가 여러개의 로마자 문자열로 결합되어 있을 때,

문자열을 하나씩 분리하여 다음 문자열과 크기 비교를 진행합니다. (for loop)

1) 로마자 문자열 전체의 총합을 구합니다. (for loop)

2) 만약 다음 로마자의 수가 현재 위치의 로마자의 수보다 크다면 현재 로마자의 숫자만큼 감소시킵니다. (-=)

2-1) 만약 다음 로마자의 수가 현재 위치의 로마자의 수보다 작거나 같으면 현재 로마자의 숫자만큼 증가시켜줍니다. (+=)

아래 풀이코드로 알아보겠습니다:

def answer(s) :
	result = 0
	roman_number = {
    	"I" : 1,
    	"V" : 5,
    	"X" : 10,
    	"L" : 50,
    	"C" : 100,
    	"D" : 500,
    	"M" : 1000,
  	}
    
    for i in range(len((s)) :
    	if roman_number[s[i]] < roman_number[s[i+1]] :
        	result -= roman_number[s[i]]
        else :
        	result += roman_number[s[i]]
    return result
profile
누구나 이해할 수 있도록

0개의 댓글