Til

Til 2024.03.13 알고리즘 파이썬

dini_dini 2024. 3. 13. 13:50

>>정수찾기

 

##오류코드##
 
def solution(num_list, n):
    for num in num_list:
        if num == n:
            return 1
        else :
            return 0
 

 

위 코드대로 돌리면 첫번째 요소만 확인하고바로 리턴해버림

 

예시 )) num_list[1, 2, 3, 4, 5]이고 n이 3일 때, 함수는 1을 반환해야 하지만, 현재 코드는 첫 번째 요소인 1과 3을 비교하여 0을 반환

 

위의 코드처럼 쓰고 싶다면

 

 
def solution(num_list, n):
    for num in num_list:
        if num == n:
            return 1
    return 0 #리턴이 for문 밖에 있어야함
 

 

이렇게 수정하면 모든요소를 확인후 n을 발견하지 못했을때만 0 을 반환

리턴이 포문 밖에 있어야 넘리스트 한바퀴 다돌고 정확한 값을 얻을수 있음

 

 

더 쉽게 수정한 코드

 

\
def solution(num_list, n):
    if n in num_list: #만약 엔이 리스트안에 있다면
        return 1
    else :
        return 0
 

 

>>뒤에서 5등까지

 
def solution(num_list):
    num_list.sort()
    return num_list[:5] #처음부터 5번째까지 추출
   

 

오류내면서 헷갈리는것들

코드 설명 결과
num_list.sort()
return num_list[1:6]
#오류코드
원본리스트 num_list를 제자리에서 정렬
두번째에서 여섯번째를 반환
원본리스트가 변경됨
2번째부터 6번째 반환
sorted(num_list[1:6])
#다른방법
num_list의 인덱스 1부터 5까지의 부분리스트만 추출하여 반환 새로운 리스트반환
원본리스트는 동일 
원하는 범위의 리스트가정렬되어 반환

 

 

표기방식마다 들어가는숫자가 달라서 너무헷갈림ㅇㅇ

 

솔트와 솔티드가 달라서 생기는 문제인것같음

sort() 메소드를 사용할 경우 정렬된 리스트를 기준으로 인덱스가 조정되고, sorted() 함수를 사용할 경우 원본 리스트의 순서를 유지한 채로 정렬된 리스트를 반환