Python
[PYTHON] list()와 [], sort()와 sorted, reverse
ollive
2024. 7. 17. 22:10
20. 정수 내림차순으로 배치하기 : list(), 매서드
20 - 풀이 1) 매서드사용
- list 매서드 sort는 해당 list 내 데이터 타입이 같은 자료만 있을 때 사용 가능하다.
- 또한 매서드는 함수에 담을 수 없다. 따라서 값이 수정되면 그때마다 원본리스트가 바뀐다.
def solution(n):
answer = []
# 숫자 n을 문자형으로 바꿔주면 i에 자릿수를 하나씩 넣을 수 있음
for i in str(n):
#각 자리값을 리스트에 추가하고 역순으로 정렬함
#.sort()와 .reverse()는 .sort(reverse = True)로 사용이 가능함
answer.append(i)
answer.sort()
answer.reverse()
#조인으로 각각의 숫자를 합쳐주고 숫자형으로 다시 변환시킴
return int("".join(answer))
20 - 풀이 2) list() 와 [ ] 결과 비교
# 풀이 2
def solution(n):
# n을 문자형으로 바꾸고 list 구조로 저장함 ['1', '1', '8', '3', '7', '2']
answer = list(str(n))
answer.sort(reverse = True)
return int("".join(answer))
- 풀이 2에서 주의해야 할 점은 리스트를 어떻게 사용하는지에 따라 결과값이 달라진다는 점이다.
- 빈 리스트를 선언할 때는 a = list() 와 a = [ ]가 같은 결과를 가져온다. 하지만 결과값을 가져오는 속도부분에서 [ ]을 사용하는 것이 효과적이다.
- 리스트 선언이 아닌 값이 있는 변수를 바꾸는 것이라면 결과가 달라진다.
- list(변수)는 변수의 값을 리스트로 바꾸는 것과 같다. for문과 같은 결과가 나오며, 한가지 요소에만 사용가능하다.
- [변수]는 변수의 타입은 그대로 두고 리스트로 감싸는 것과 같다.
- 출력값 비교
def solution(n): #입력 : solution(118372)
answer1 = n #출력 : 118372
answer2 = [(n)] #출력 : [118372]
answer3 = [str(n)] #출력 : ['118372']
answer = list(str(n)) #출력 : ['1', '1', '8', '3', '7', '2']
def solution(n,m): # 입력 : solution(136373,284)
answer1 = n,m # 출력 : (136373, 284)
answer2 = [(n,m)] # 출력 : [(136373, 284)]
answer3 = [str(n),str(m)] # 출력 : ['136373', '284']
answer = list(str(n))+list(str(m)) # 출력 : ['1', '3', '6', '3', '7', '3', '2', '8', '4']
참고: https://conansjh20.tistory.com/79
20 - 풀이 3) 리스트.sort() 와 sorted(리스트), reverse
#풀이3
def solution(n):
return int("".join(sorted(list(str(n)), reverse=True)))
print(sorted(list(str(n)))) # 출력 : ['1', '3', '3', '3', '4', '6', '7']
print(sorted(list(str(n)), reverse=True)) # 출력 : ['7', '6', '4', '3', '3', '3', '1']
- 리스트.sort()는 리스트의 매소드로 리스트 원본을 수정하며 함수에 담을 수 없다.
- sorted(리스트)는 내장 함수이며, 원본은 그대로이며 정렬된 결과를 반환한다.
- 리스트.reverse()는 리스트의 매소드로 리스트 원본을 수정하며 함수에 담을 수 없다. 또한 원본에서 역순으로만 뒤집힐 뿐 정렬되진 않는다.
- 리스트.sort(reverse = True)를 사용하면 정렬하여 뒤집혀 역순으로 정렬된 결과를 얻을 수 있다.
- sorted(리스트, reverse=True) 내장 함수이며, 역순으로 정렬된 결과를 반환한다.
- reversed(sorted(리스트))를 사용해도 역순으로 정렬된 결과를 얻을 수 있다.
21. 하샤드 수 :
21 - 풀이 1)
def solution(x):
answer = True
sum_x = 0
for i in str(x):
sum_x += int(i)
if x % sum_x == 0:
answer = True
else:
answer = False
return answer
21 - 풀이 2) list comprehension, bool
def solution(n):
return n % sum(int(x) for x in str(n)) == 0
- int(x) for x in str(n) : 리스트 컴프리헨션으로, 문자n을 x에 하나씩 넣어 나온 결과를 int()로 씌워서 숫자로 취한다.
- sum( 1.결과 ) : int(x)를 더한다
- n % 2.결과 : n을 sum(int(x))의 값으로 나누어 나머지를 본다
- return 3.결과 == 0 : 나머지가 0 인지 확인하여 0과 같으면 True, 아니면 False를 반환한다
def solution(n):
return not( n % sum([int(x) for x in str(n)]) )
위와 같은 식이지만 not()으로 식을 묶음으로써 ==0을 제외하였다.
bool논리 인해 0 이 나오면 False를 숫자가 나오면 True를 반환하겠지만, not을 사용하여 결과를 반대로 반환된다.
21 - 풀이 3) map
def solution(x):
answer = True
sum_x = sum(map(int,str(x)))
if x % sum_x:
answer = False
return answer
map object는 이미 iterable 하기 때문에 list 함수를 사용 안해도 sum값을 구할 수 있다.
22. 콜라츠 추측 :
22 - 풀이 1)
def solution(num):
n = 0
if num == 1 :
n = 0
else:
while num > 1 :
if num % 2 == 0:
num = num // 2
else:
num = num *3 +1
n += 1
if n == 500:
n = -1
break
return n