๋ก๋ง์์์ ์ซ์๋ก ๋ฐ๊พธ๊ธฐ 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
def roman_to_num(s):
answer = 0
string = ''
roman = {
"I":1,
"V":5,
"X":10,
"L":50,
"C":100,
"D":500,
"M":1000
}
for i in range(len(s)-1, -1, -1):
string = s[i]
if "V" in string or "X" in string:
roman["I"] = -1
elif "L" in string or "C" in string:
roman["X"] = -10
elif "D" in string or "M" in string:
roman["C"] = -100
answer += roman[s[i]]
return answer
์ซ์๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์ธ nums๋ฅผ ์ธ์๋ก ์ ๋ฌํฉ๋๋ค.
์ซ์์ค์์ ๊ณผ๋ฐ์(majority, more than a half)๊ฐ ๋์ ์ซ์๋ฅผ ๋ฐํํด์ฃผ์ธ์.
์๋ฅผ ๋ค์ด,
nums = [3,2,3]
return 3
nums = [2,2,1,1,1,2,2]
return 2
๊ฐ์
nums ๋ฐฐ์ด์ ๊ธธ์ด๋ ๋ฌด์กฐ๊ฑด 2 ์ด์์
๋๋ค.
#ํ์ด1
def more_than_half(nums):
for i in nums:
if nums.count(i) > len(nums)//2:
return i
#ํ์ด2
def more_than_half(nums):
return [i for i in nums if nums.count(i)>len(nums)//2][0]
s๋ ์ฌ๋ฌ ๊ดํธ๋ค๋ก ์ด๋ฃจ์ด์ง String ์ธ์์ ๋๋ค. s๊ฐ ์ ํจํ ํํ์ธ์ง ์๋์ง true/false๋ก ๋ฐํํด์ฃผ์ธ์.
์ข ๋ฅ๋ '(', ')', '[', ']', '{', '}' ์ผ๋ก ์ด 6๊ฐ ์์ต๋๋ค. ์๋์ ๊ฒฝ์ฐ ์ ํจํฉ๋๋ค.
ํ ๋ฒ ๊ดํธ๋ฅผ ์์ํ์ผ๋ฉด, ๊ฐ์ ๊ดํธ๋ก ๋๋ด์ผ ํ๋ค. ๊ดํธ ์์๊ฐ ๋ง์์ผ ํ๋ค.
์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ต๋๋ค.
s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return true
def is_valid(string):
open = ["[", "{", "("]
close = ["]", "}", ")"]
list1 = []
if len(string) % 2 == 1 or string[0] in close or string[-1] in open:
return False
for i in range(len(string)):
if string[i] in open:
list1.append(string[i])
else:
if open.index(list1[-1]) == close.index(string[i]):
list1.pop()
else:
return False
return True
string[i]
๊ฐ์ด open ๋ฆฌ์คํธ ์์์ ํด๋น๋๋ฉด list1์ append ํ๋ค. string[i]
๊ฐ์ด close ๋ฆฌ์คํธ ์์ ๊ฐ์ ํด๋น๋๋ฉด list1์ ๋ค์ด๊ฐ์๋ ์์์ ์ธ๋ฑ์ค ๊ฐ(๊ฐ๊ฐ open, close ๋ฆฌ์คํธ์์์ ์ธ๋ฑ์ค ๊ฐ)์ ๋น๊ตํ๋ค. ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ผ๋ฉด list1์ ๊ฐ์ฅ ๋ท ์์๋ฅผ ์ ๊ฑฐํ๋ค.(์ธ๋ฑ์ค ๊ฐ์ด ๊ฐ๋ค๋๊ฑด ์๋ก์ ์ง์ด๋ผ๋ ๊ฒ์ ์๋ฏธ!)nums๋ ์ซ์๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์
๋๋ค.
๊ฐ์ฅ ์์ฃผ ๋ฑ์ฅํ ์ซ์๋ฅผ k ๊ฐ์๋งํผ return ํด์ฃผ์ธ์.
nums = [1,1,1,2,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]
def top_k(nums, k):
answer = []
while k > 0:
k -= 1
a = max(nums, key = lambda x : nums.count(x))
answer.append(a)
while a in nums:
nums.remove(a)
return answer
max()
ํจ์๋ฅผ ์ฌ์ฉํ์๋ค. ๊ทธ๋ฆฌ๊ณ key ๊ฐ์ผ๋ก lambda
ํจ์์ count()
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ์๋ค. max()
ํจ์์ key ๊ฐ์๋ ํจ์๊ฐ ๋ค์ด ๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ lambda
ํจ์๋ฅผ ์๊ธดํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. remove()
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ข
๋ต์์ ์์ฑํ์๋ค. while๋ฌธ์ ์ ์ ํ ํ์ฉ๋ฒ์ ๋ํด ์ข ๋ ์ต์ํด์ง์. ์์ง์ for๋ฌธ์ ์น์คํ๋ ๊ฒฝํฅ์ด ์๋ค. ์ธ์์ธ height๋ ์ซ์๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์ ๋๋ค.๊ทธ๋ํ๋ก ์๊ฐํ๋ค๋ฉด y์ถ์ ๊ฐ์ด๊ณ , ๋์ด ๊ฐ์ ๊ฐ๊ณ ์์ต๋๋ค.
์๋์ ๊ทธ๋ํ๋ผ๋ฉด height ๋ฐฐ์ด์ [1, 8, 6, 2, 5, 4, 8, 3, 7] ์ ๋๋ค.
https://storage.googleapis.com/replit/images/1555380144403_97221ca23fbb92beaae5b6c800ceb5c8.pn
์ ๊ทธ๋ํ์ ๋ฌผ์ ๋ด๋๋ค๊ณ ์๊ฐํ๊ณ , ๋ฌผ์ ๋ด์ ์ ์๋ ๊ฐ์ฅ ๋์ ๋ฉด์ ์ ๊ฐ์ ๋ฐํํด์ฃผ์ธ์.
๊ฐ์
๋ฐฐ์ด์ ๊ธธ์ด๋ 2์ด์์
๋๋ค.
def get_max_area(height):
dic = {}
for i in range(len(height)):
for j in range(len(height)):
width = abs(j - i)
dic[width] = min(height[i], height[j])
return max([(i[0]*i[1]) for i in dic.items()])
dic.items()
ํจ์์ max()
ํจ์๋ฅผ ํตํด ๋ต์ ๊ตฌํ์๋ค.