[CodeKata] Week2 - Day1,2

byhazy·2021년 7월 4일
0

algorithm 풀이

목록 보기
39/44

📌 CodeKata - Week2, Day1

문제

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

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

SymbolValue
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

풀이

def roman_to_num(s):
    roman = {
        "I" : 1,
        "V" : 5,
        "X" : 10,
        "L" : 50,
        "C" : 100,
        "D" : 500,
        "M" : 1000       
    }  
  
    n = 0
    for i in range(len(s)-1):
      if roman[s[i]] < roman[s[i+1]]:
        n = n - roman[s[i]]       
      else:
        n = n + roman[s[i]]
    return n + roman[s[-1]]

➡️ 이 문제에서 알아야할 점은 앞의 로마자가 크면 앞에서 뒤로 빼고, 뒤의 로마자가 크면 뒤에서 앞을 뺀다.


📌 CodeKata - Week2, Day2

문제

숫자로 이루어진 배열인 nums를 인자로 전달합니다.

숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.

예를 들어,

nums = [3,2,3]
return 3

nums = [2,2,1,1,1,2,2]
return 2
  • 가정
    nums 배열의 길이는 무조건 2 이상입니다.

풀이

def more_than_half(nums):
    maj = len(nums) / 2 #6
    # print(maj)
    for i in nums:
        a = nums.count(i)
        # print(a)
        if a >= maj:
            return i
        else:
            pass 

0개의 댓글