[python ๊ธฐ์ดˆ] code-kata week2-1

EMMAยท2022๋…„ 3์›” 21์ผ
1

[wecode] Code-kata

๋ชฉ๋ก ๋ณด๊ธฐ
6/12
post-custom-banner

๐Ÿ–ฅ Code-kata week2-1
p.s. 2์ฃผ์ฐจ๋Š” ์ƒˆ๋กœ์šด ๋™๊ธฐ์™€ ํ•จ๊ป˜ ํ–ˆ๋‹ค!


๋ฌธ์ œ
๋กœ๋งˆ์ž์—์„œ ์ˆซ์ž๋กœ ๋ฐ”๊พธ๊ธฐ 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.


ํ’€์ด
์ผ๋‹จ ์ธ์ž๋Š” ๋กœ๋งˆ์ž์˜ ์กฐํ•ฉ์ด๊ณ , return๊ฐ’์€ ์ˆซ์ž์˜ ํ•ฉ์ด์–ด์•ผ ํ•œ๋‹ค.
๊ฒฐ๊ตญ ๋กœ๋งˆ์ž > ๊ฐ ๋กœ๋งˆ์ž์˜ ์ง๊ฟ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ > ์—ฐ์‚ฐ์˜ ์ˆœ์„œ๋กœ ์ด๋ค„์ ธ์•ผ ํ•œ๋‹ค.

  • ๋กœ๋งˆ์ž-์ˆซ์žํ‘œ๋ฅผ dictionary ํ˜•ํƒœ๋กœ ๋จผ์ € ๋งŒ๋“ค์–ด ์ค€๋‹ค.
    • ๊ทธ๋ž˜์•ผ ๊ฐ ๋กœ๋งˆ์ž๋ฅผ key๋กœ ๋งŒ๋“ค๊ณ , ํ˜ธ์ถœํ•˜๋ฉด value๊ฐ€ ๋  ์ˆซ์ž๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Œ
  • ์—ฐ์‚ฐ์€ ์•„๋ž˜ 2๊ฐ€์ง€ ๊ทœ์น™์„ ๊ฐ–๋Š”๋‹ค
    • ์ฐจ๋ก€๋Œ€๋กœ 2๊ฐœ์”ฉ ๋น„๊ตํ•˜๋Š”๋ฐ, ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž > ๋‘ ๋ฒˆ์งธ ์ˆซ์ž์ธ ๊ฒฝ์šฐ, ๋‘˜์„ ํ•ฉํ•œ๋‹ค. ์ฆ‰, ์ˆซ์ž๋ฅผ ๊ทธ๋Œ€๋กœ ์ƒˆ๋กœ์šด list์— ๋„ฃ์œผ๋ฉด ๋จ
    • ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž < ๋‘ ๋ฒˆ์งธ ์ˆซ์ž์ธ ๊ฒฝ์šฐ, ๋‘ ๋ฒˆ์งธ ์ˆซ์ž์—์„œ ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ๋บ€๋‹ค. ์ฆ‰, ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋Š” ์Œ์ˆ˜ํ™” ํ•ด์„œ list์— ๋„ฃ์Œ

์ฝ”๋”ฉ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜์˜€๋‹ค.

def roman_to_num(s):
	#๋กœ๋งˆ์ž - ์ˆซ์ž dictionary 
    my_dict = {"I":1,"V":5, "X":10, "L":50, "C":100, "D":500, "M":1000}
    
    #์ธ์ž์ธ ๋กœ๋งˆ์ž ๋ฌธ์ž์—ด์„ ์ชผ๊ฐœ์„œ chr_list์— ๋‹ด๋Š”๋‹ค 
    chr_list = []
    for chr in s:
        chr_list.append(chr)
	
    #์ชผ๊ฐ  ๋ฌธ์ž์—ด์˜ value๊ฐ’์„ list์— ๋‹ด๋Š”๋‹ค 
    value_list = []
    for chr in chr_list:
        value_list.append(my_dict[chr])
	
    #์ตœ์ข… ์ˆซ์ž๋ฅผ ๋‹ด์„ reulst (list) ์„ ์–ธ
    result = []
    #๋งˆ์ง€๋ง‰ ์š”์†Œ๊นŒ์ง€ ๋Œ๋ฉด for๋ฌธ ์ค‘๋‹จํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์ตœ๋Œ€๊ฐ’(์ตœ์ข… index) ๋ฏธ๋ฆฌ ์„ ์–ธ 
    max_length = len(value_list)
    for i in range(0,max_length):
    	#๋งˆ์ง€๋ง‰ ๋ฌธ์ž๊นŒ์ง€ ๋Œ์•˜์œผ๋ฉด, ์ข…๋ฃŒ
        if i+1 >= max_length: 
            result.append(value_list[i])
            break
        #์•ž์ž๋ฆฌ์ˆ˜๊ฐ€ ๋” ์ž‘์œผ๋ฉด ์Œ์ˆ˜๋กœ ๋ณ€๊ฒฝ 
        if value_list[i]<value_list[i+1]:
            value_list[i] = -value_list[i] 
            result.append(value_list[i])
        #์•ž์ž๋ฆฌ์ˆ˜๊ฐ€ ๋” ํฌ๋ฉด ์–‘์ˆ˜ ๊ทธ๋Œ€๋กœ append
        else:
            result.append(value_list[i])

    return sum(result)
profile
์˜ˆ๋น„ ๊ฐœ๋ฐœ์ž์˜ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ | explore, explore and explore
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€