정답) class Solution: def isValid(self, s: str) -> bool: stack = [] closeToOpen = {")" : "(", "]" : "[", "}" : "{"} for parenthesis in s: # 만약 열린 괄호라면 스택에 추가 if parenthesis not in closeToOpen: stack.append(parenthesis) # 만약 닫힌 괄호라면 else: # 만약 스택이 비어있지 않고 # 스택의 top이 닫힌 괄호와 상응하는 열린 괄호라면 if stack and stack[-1] == closeToOpen[parenthesis]: # 스택에서 제거 stack.pop() else: return False # 스택이 비어있다면 True, 스택에..
정답) class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: # 주어진 문자열 리스트를 길이 순서로 정렬. strs.sort(key=len) # 가장 작은 문자열이 기준. compare = strs[0] for i in range(1, len(strs)): for j in range(len(compare)): # 문자들을 비교 중 맞지 않는 문자가 발견되면 if compare[j] != strs[i][j]: # 비교 변수를 맞는 부분까지만 저장 compare = compare[0:j] # j for문 끝내기 break return compare 문제) 문제링크 주어진 문자열 리스트에서 가장 긴 공통 접두사(prefix)를 찾는 함수..
정답) class Solution: def romanToInt(self, s: str) -> int: # 딕셔너리에 각 문자에 상응하는 정수를 저장. romanDic = { 'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000 } # 최종으로 리턴할 변수에 0번째 변환된 정수를 저장. res = romanDic[s[0]] for i in range(1, len(s)): # 선형할때마다 변환된 정수를 더해줌. res += romanDic[s[i]] # 하지만 특수상황이 발견되면 필요한만큼의 값을 다시 뺌. if s[i] in ['V', 'X', 'L', 'C', 'D', 'M']: if romanDic[s[i]] > romanDic[s[i-1]]: res -..
정답) class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: # 딕셔너리를 사용해 필요한 정수와 그 인덱스 값을 저장. # 첨에는 배열의 0번째 정수와 그 인덱스 0을 저장. numDic = {nums[0] : 0} # 1부터 배열의 끝까지 선형검색한다 for i in range(1, len(nums)): # 선형검색하면서 짝을 이룰 정수를 구한다 pair = target - nums[i] # 만약 짝이 존재한다면 if pair in numDic: # 그 짝의 인덱스와 선형검색하던 정수의 인덱스를 리턴. return numDic[pair], i # 짝이 존재하지 않는다면 딕셔너리에 현재 정수와 인덱스를 저장. numDic..