TIL 알고리즘(3)

알고리즘

목록 보기
3/21

정수 찾기

문제 설명

<문제>
정수 리스트 num_list와 찾으려는 정수 n이 주어질 때,
num_list안에 n이 있으면 1을 없으면 0을 return하도록 solution 함수를 완성해주세요.

<제한사항>
3 ≤ num_list의 길이 ≤ 100
1 ≤ num_list의 원소 ≤ 100
1 ≤ n ≤ 100

<입출력 예 #1>
num_list = [1, 2, 3, 4, 5]
n = 3
[1, 2, 3, 4, 5] 안에 3이 있으므로 1을 return합니다.


해결과정

첫 번째 시도

def solution(num_list, n):
    if str(n) in num_list:
        return 1
    else:
        return 0

# 입력값 〉	[1, 2, 3, 4, 5], 3
# 기댓값 〉	1
# 실행 결과 〉	실행한 결괏값 0이 기댓값 1과 다릅니다.

<str> in으로 조사하려고 했다.
틀린 걸 보니
num_list의 요소가 int인 것 같다.

두 번째 시도

def solution(num_list, n):
    for num in num_list:
        if num == n:
            return 1
        else:
            return 0
            
# 입력값 〉	[1, 2, 3, 4, 5], 3
# 기댓값 〉	1
# 실행 결과 〉	실행한 결괏값 0이 기댓값 1과 다릅니다.

return이 반복되더라도 되는지 확인하고 싶었다.
안 되는 것 같다.

짚고 넘어가기

num_list = [1,2,3,4,5]
result = type(num_list)
# <class 'list'>
result = type(num_list[1])
# <class 'int'>

리스트 안의 원소가 확실히 정수인지(str이 아닌지) 확인했다.

세 번째 시도

def solution(num_list, n):
    result = 0
    for num in num_list:
        if num == n:
            result += 1
    if result > 0:
        return 1
    else:
        return 0

# for문으로 뽑기 좀 힘든데..?

단순히 for if문 하나씩 사용해서는 도출하기 힘들었다.
사전에 변수를 설정해서 확인하는 작업을 더했다.


후기

솔직히 아직 각각의 자료형에 대해 빠삭하게 알지 못한다.
이 점이 문제를 풀면서 좀 성가신 부분이다.
(물론 확인하며 가면 좋지만.... 시간이..)

그래도 나름 합리적으로 시도했다고 생각한다.

다른 시도로는 리스트 안의 정수를 모두 문자열로 변환해서 확인하는 방법이 있겠다.
리스트째로 변환할 수는 없으니까, for문을 돌려서 다 빼야한다.
각 요소의 자료형을 변환하고
이렇게 저렇게
하면 좀 복잡할 것 같다.

for num in num_list:
    num = str(num)

print(num_list)
# [1, 2, 3, 4, 5]
print(type(num_list[1]))
# <class 'int'>

확인차 여기까지만 했는데도 좀 힘들다.

자료형을 변환하고도 append해주지 않으면 리스트가 그대로 나온다.

num_list = ['1']

print(num_list)
# ['1']

(참고로 문자열로 변환한 정수는 리스트 내부에서 따옴표를 가진다.)

0개의 댓글