-
파이썬 알고리즘 - 공통시작단어 반환, 로마숫자 변환일반 프로그래밍/알고리즘 2022. 4. 18. 20:41
문제 5 : strs는 단어가 담긴 배열이다. Argument로 strs가 주어졌을 때 , 공통된 시작 단어(prefix)를 반환하라. 예를 들어 strs = ['start', 'stair', 'step']일 때 반환 값은 'st'가 되어야 한다.
나의 답
def get_prefix(strs): if len(strs) == 0: return '' prefix = strs[0] for i in range(1,len(strs)): for j in range(len(strs[i])): if strs[i][j] not in first: first = first[:j] break return prefix
먼저 strs가 빈 문자열로 주어졌을 때를 대비한 예외 if문을 작성하였다. 만약 strs가 빈 문자열이 아닐 경우, 반환할 prefix 변수에 strs의 첫번째 단어를 할당하였고, 다음 단어부터 strs와 비교하여 일치하지 않는 부분의 바로 전 철자까지 prefix를 슬라이 싱하여 공통된 시작 단어를 찾게 하였다.
예를 들어 strs = ['apple', 'apache']라고 한다면, 'apache'의 두 번째 'a'부터 'apple'의 같은 인덱스 순서 철자인 'p'와 일치하지 않는다. 결국 'apache'의 두 번째 'a'는 strs [1][2]로 표현이 가능하고, 따라서 위의 파이썬 코드는 j값에 2를 넣어 'apple'[:2]를 수행하면 남은 글자는 'ap'가 될 것이다.
문제 6 : 로마숫자 s가 argument로 주어졌을 때, 이를 아라비아 숫자로 반환해라.
나의 답
def roman_to_num(s): result = 0 천 = s.count("M") 오백 = s.count("D") 백 = s.count("C") 오십 = s.count("L") 십 = s.count("X") 오 = s.count("V") 일 = s.count("I") if 'CM' in s: 천 = 천-1 백 = 백-1 result += 900 if 'CD' in s: 오백 = 오백-1 백 = 백-1 result += 400 if 'XC' in s: 백 = 백-1 십 = 십-1 result += 90 if 'XL' in s: 오십 = 오십 -1 십 = 십-1 result += 40 if 'IX' in s: 십 = 십-1 일 = 일-1 result += 9 if 'IV' in s: 오 = 오-1 일 = 일-1 result += 4 return result + (천*1000) + (오백*500) + (백*100) + (오십*50) + (십*10) + (오*5) + 일
처음에는 s를 인덱싱하여 접근하려고 하였으나, 방법에 어려움을 느껴 선회하였다. 먼저 로마 숫자에 포함된 각 알파벳들의 등장 횟수를 카운팅 하였다. 그다음으로 IV, CM 같은 특수 숫자가 s안에 있다면 해당하는 알파벳 쌍의 카운팅을 1 줄이고, 그 특수 숫자의 값을 result에 더하였다. 마지막으로 일치하는 아라비아 수에 등장 횟수를 곱하고, 이를 result에 더하여 최종 결과를 반환하였다.
'일반 프로그래밍 > 알고리즘' 카테고리의 다른 글
파이썬 알고리즘 - 복소수 곱 구하기, 배열 뒤집기 (0) 2022.04.26 파이썬 알고리즘 - 자주 등장한 숫자구하기, 넓이 구하기 (0) 2022.04.22 파이썬 알고리즘 - 과반수 찾기, 괄호 유효성 검사 (0) 2022.04.20 파이썬 알고리즘 - 알파벳의 중복이없는 가장 긴 단어/뒤집은수 일치 (0) 2022.04.14 파이썬 알고리즘 - 덧셈 수 찾기 / 숫자 뒤집기 (0) 2022.04.12