주요 포인트
- 스택/큐와 리스트를 사용하여 문제를 풀 때,
- 목록에 포함될 조건을 만족하는지 확인합니다.
- 목록에 채워진 숫자가 항상 순차적으로 채워질 필요는 없습니다. 스택에 남은 값이 없을 때까지 진행할 수 있습니다.
- functools 가져오기
- functools.cmp_to_key(func): 정의된 func 함수의 반환 값(1, 0, -1)에 따라 정렬 가능한 키 값 제공
- sorted_list = 정렬됨(목록, 키=functools.cmp_to_key(n, m))
- https://wikidocs.net/109303
029 좌표를 순서대로 배열하는 방법은? ― functools.cmp_to_key
functools.cmp_to_key(func)는 sorted()와 같은 정렬 함수의 키 매개변수에 함수(func)를 전달할 때 사용하는 함수입니다. 그러나 func() 함수는…
wikidocs.net
- int 유형의 목록을 문자열로 변환
- 목록(지도(str, 목록))
- 소수 찾기: 1과 자기 자신 외에 약수가 없는 수.
- 주어진 숫자를 제곱근으로 나눌 때 나누어지는지 확인합니다.
- https://coding-of-today.169
Python – 소수 알고리즘 구현
코딩 시험을 공부하거나 준비할 때 특정 숫자가 소수인지 아닌지 판단해야 할 때가 있습니다. 소수는 1과 자기 자신 이외의 수로는 나누어지지 않습니다.
coding-of-today.tistory.com
- 에라토스테네스의 체를 사용하여
(프로그래머) 소수 찾기 (연습) (python)
(프로그래머) 소수 찾기 (연습) (python) 레벨1 문제 설명 1과 입력한 숫자 n 사이의 소수의 개수를 반환하는 함수 solution을 만드세요. 소수는 1과 자기 자신으로만 나누어집니다.
코딩-lks.tistory.com
- 문자열을 나열하면 각 문자가 목록으로 구분됩니다. 목록(‘abc’) -> (‘a’, ‘b’, ‘c’)
- 순열 및 조합 목록 만들기: import itertools, itertools.permutation(list, n), itertools.combination(list, n)
(Python) 순열, 조합
Python의 itertools를 사용하면 for 루프 없이 순열 및 조합을 구현할 수 있습니다.
velog.io
1. 뒤에 있는 큰 수 찾기
이 문제에 대한 코드는 간단하지만 아이디어는 단순해 보이지 않습니다.
숫자의 인덱스는 스택에 순차적으로 쌓이고 스택의 마지막 인덱스 값과 현재 인덱스 값을 항상 비교한다.
현재 인덱스가 크면 answer에 값이 저장됩니다.
def solution(numbers):
stack = ()
answer = (-1) * len(numbers)
for i in range(len(numbers)):
while stack and numbers(stack(-1)) < numbers(i):
#가장 가까운 뒷 큰수일 때, 해당 자리의 숫자를 answer로 넣어줌.
#stack.pop() == stack(-1)
answer(stack.pop()) = numbers(i)
stack.append(i)
return answer
2. 가장 큰 숫자
이 문제에 대한 코드도 간단하지만 아이디어는 간단하지 않습니다.
정렬을 위한 새로운 기능을 소개합니다.
import functools
def comp(n, m):
if int(n+m) < int(m+n):
return 1
elif int(n+m) == int(m+n):
return 0
else:
return -1
def solution(numbers):
numbers = list(map(str, numbers))
sorted_list = sorted(numbers, key=functools.cmp_to_key(comp))
answer="".join(sorted_list)
# '0000' -> '0'으로 바꿔주기 위한 코드
return str(int(answer))
3. 소수 찾기
이 문제는 수준 1입니다.
- 어떤 숫자가 n의 제곱근으로 나누어 떨어지는지 확인합니다.
def is_prime(n):
if n <= 1: return False
else:
for i in range(2, int(n**(1/2))+1):
if n % i == 0 :
return False
return True
에라토스테네스의 체를 사용할 때 그 원리는 다음과 같다.
- 2에서 n까지의 정수가 set() 데이터 유형으로 answer에 저장됩니다.
- for 문은 2부터 n까지를 실행하는데 답에 i가 있으면 n까지의 숫자 중 i의 배수를 모두 제거한다.
- 답에는 2에서 n까지의 소수만 남습니다.
- len(answer)을 반환하여 해결했습니다!
def solution(n):
answer = set(range(2,n+1))
for i in range(2,n+1):
if i in answer:
answer -= set(range(i*2,n+1,i))
return len(answer)
import itertools
def is_prime(n):
if n <= 1: return False
else:
for i in range(2, int(n**(1/2))+1):
if n % i == 0 :
return False
return True
def solution(numbers):
# 문자열을 리스트화
numbers = list(numbers)
stack = ()
answer = 0
#조합 가능한 모든 경우의 수 구하기
for i in range(1, len(numbers)+1):
for j in list(itertools.permutations(numbers, i)):
num = int(''.join(j))
if num not in stack:
stack.append(num)
if is_prime(num):
answer += 1
return answer