2023. 5. 28. 09:23ㆍAlgorithm
1. 모음 제거
(문제 설명, 제한사항, 입출력 예)
문자열이 주어질 때, 모음 (a, e, i, o, u)를 제거한 문자열을 반환하라는 문제이다.
(내가 생각한 풀이 과정)
예전에 배웠던 정규 표현식(re.sub)을 이번에는 이용해 보기로 했다.
정규 표현식이란 re.sub(정규 표현식, 치환 문자 (변경하고 싶은 문자), 대상 문자열)의 형태로 사용하는 파이썬의 기능이며,
이 코드에서는 대상 문자인 [aeiou]의 형태로 정규표현식을 표현하고,
해당 문자를 제거할 것이기 때문에 치환문자는 ""(공란)이 되겠다.
마지막으로, 대상 문자열은 매개변수로 들어오는 문자열 my_string로 설정해 주면 원하는 형태로 반환해 줄 수 있다.
(코드)
💡 내 코드
import re
def solution(my_string):
return re.sub("[aeiou]", "", my_string)
💡 다른 사람의 풀이 코드
join과 리스트 컴프리헨션, 그리고 in으로 한 번에 묶어서 아래와 같이 코드를 짤 수도 있다.
def solution(my_string):
return "".join([i for i in my_string if not(i in "aeiou")])
2. 문자열 정렬하기 (1)
(문제 설명, 제한사항, 입출력 예)
문자열이 주어질 때, 문자열 안에 있는 숫자만 골라, 오름차순으로 정렬한 리스트를 반환하라는 문제이다.
(내가 생각한 풀이 과정)
리스트 컴프리헨션 안에 문자열 반복을 돌리면서, 해당 문자가 알파벳인지 확인한다.
만약, 알파벳이 아니라면 정수로 반환한 후 리스트에 추가한다.
마지막으로, sorted 정렬 함수를 활용해서 반환한다.
(코드)
💡 내 코드
def solution(my_string):
alpha = "abcdefghijklmnopqrstuvwxyz"
answer = [int(i) for i in my_string if i not in alpha]
return sorted(answer)
💡 다른 사람의 풀이 코드
정수를 확인해주는 isdigit( ) 함수를 사용할 수도 있었다.
그리고 내가 세 줄로 길게 써 내려간 코드를 한 줄로 줄이는 것도 가능하다.
def solution(my_string):
return sorted([int(c) for c in my_string if c.isdigit()])
3. 숨어있는 숫자의 덧셈 (1)
(문제 설명, 제한사항, 입출력 예)
문자열이 주어질 때, 문자열 안에 있는 모든 자연수의 합을 구하라는 문제이다.
단, 연속으로 주어지는 숫자도 모두 각각의 한 자리 숫자로 취급한다고 조건이 주어져있다.
(내가 생각한 풀이 과정)
순서대로 단계를 나눠 코드를 작성했다. 아래의 풀이 과정을 잘 따라가 보자.
- 문자열에서 숫자를 제외한 나머지를 모두 제거한다. -> 정규 표현식 (re.sub) 사용
- 해당 문자열을 정수로 변환한다.
- 변환된 정수가 0이 될 때까지 10으로 계속 나눠주면서 나머지값을 계속 더해준다. -> 첫째 자릿수를 계속 더해준다.
(코드)
💡 내 코드
import re
def solution(my_string):
answer = 0
my_number = int(re.sub(r'[^0-9]', '', my_string))
while my_number!=0:
answer += my_number % 10
my_number //= 10
return answer
💡 다른 사람의 풀이 코드
2번 문제인 문자열 정렬하기 (1)과 비슷한 방법으로 풀 수 있다.
핵심은 isdigit() 함수의 사용과 sorted() 함수가 sum() 함수로 바뀐 정도이다.
def solution(my_string):
return sum(int(i) for i in my_string if i.isdigit())
4. 소인수분해
(문제 설명, 제한사항, 입출력 예)
주어진 자연수의 소인수를 오름차순으로 담은 배열을 구하라는 문제이다.
(내가 생각한 풀이 과정)
소인수를 구하기 위해서는 소수를 먼저 골라줄 필요가 있었다.
왜냐하면, 내가 생각했을 때 주어진 수를 2부터 반복하면서 0으로 나누어 떨어지는지 구해주는 방법으로 소인수를 골라내려고 했는데, 이때 소수가 아닌 수도 주어진 수와 나누어 떨어질 수 있기 때문이었다.
즉, 소인수로 판별되기 위해서는 해당 수와 나누어 떨어지는 조건 1과 소수인지 조건 2를 모두 만족해야 한다는 것이다.
(코드)
💡 내 코드
def find_prime(n):
for i in range(2, n):
if n % i == 0: return False
return True
def solution(n):
answer = [i for i in range(2, n+1) if n % i == 0 and find_prime(i)]
return answer