1. 조합 사용 (순혈)
- combinations 사용 해봤다.
- 순혈 코드인 permutation를 사용했을 때는 한번 비교 했었던 결과도 같이 반환되다 보니 원하는 값이 나오지 않아서 다르게 사용했다.
import itertools as ite;
def solution(number):
answer = 0
for n_list in ite.combinations(number, 3):
if sum(n_list) == 0:
answer += 1
return answer
2. 리스트안의 문자열들 정렬하기
- 특정 위치를 기준으로 리스트 안에 있는 문자열들을 정렬하고, 같은 알파벳이면 사전기준으로 정렬하는 함수를 만들면 된다.
- 이를 위해 sorted()를 사용했지만, Key의 사용법을 몰랐으나 lambda를 통해 쉽게 해결 할수 있었다.
def solution(strings, n):
answer = sorted(strings, key=lambda x: (x[n], x))
# x[n]를 기준으로 정렬한 후, 같으면 전체를 기준으로 한번더 정렬한다.
return answer
3. 특정 문자 기준 앞에 같은 문자 찾기
- 문자열을 기준으로 나머지 앞의 문자열 중 같은 문자를 찾아 거리가 얼마나 되는지 찾는 함수를 만들면 된다.
- 나는 특정 문자를 기준으로 처음부터 이전까지 슬라이싱해서 문자를 찾은 다음, rfind로 같은 문자 위치를 찾아 내었다.
- index()를 사용할시 좌측부터 찾아 내다보니 원하는 답이 나오지 않아 사용하였다.
def solution(s):
answer = []
for i in range(len(s)):
if s[i] in s[0:i]:
answer.append(i - s[0:i].rfind(s[i]))
else:
answer.append(-1)
return answer
4. 에라토스테네스의 체
- 특정 수 이하의 숫자중 소수만 찾아 갯수가 몇개인지 찾는 방법을 만들면 된다.
- 내가 만들었던 함수는 무식하게 찾는 방법이라 수가 커질수록 찾는 시간도 늘어나서 효율성이 맞지 않아 다른 방법을 찾게 되었다.
def solution(n):
answer = [2]
for num in range(2, n+1):
if num % 2 == 0:
continue
div_num = 2
while div_num <= num:
if num % div_num == 0:
if num == div_num:
answer += 1
break
div_num += 1
return answer
에라토스테네스의 체
- 수에 맞게 list를 만들어 해당 수가 소수면 나머지 배수들을 전부 false로 변경하는 방법이다.
def solution(n):
sieve_list = [True] * (n+1) # 해당 수 만큼 True 생성
for i in range(2, n+1):
if sieve_list[i] == True: # 해당 번째가 소수면
for j in range(i*2, n+1, i): # 해당 숫자의 *2 배수부터 전부 False 변경
# (해당 배수는 곧 나눠지는 것이기 때문에)
sieve_list[j] = False
return sieve_list.count(True) -2 # 0과 1은 소수가 아니기에 count에서 뺏다.