[python] 숫자 찾기

손성수·2023년 4월 1일

알고리즘

목록 보기
8/10
  • 핵심 내용
    • 탐색하는 메소드는 find와 index 메소드가 있다.
    • find 메소드는 탐색하는 값이 없다면 -1을 반환하고
    • index 메소드는 탐색하는 값이 없다면 Value Error가 발생한다.

코딩 테스트 연습 숫자 찾기

나의 접근 방법

  • 입력 받은 num을 리스트에 쪼개어 담는다.
  • 분할된 요소를 담은 리스트에 index함수를 사용한다.
  • index함수는 찾는 값이 없다면 Value Error를 발생한다.
  • 따라서 try ,except를 이용하여 탐색값이 없다면 -1을 반환하고
  • 탐색 값이 있다면, 결과값에 1을 더하여 반환한다.

여기서 결과값에 1을 더한 이유는 문제에서 요구하는 값이
index 메소드로 찾은 값보다 1만큼 더 크기 때문



나의 첫 번째 풀이

def solution(num, k):
    arr = [i for i in str(num)]
    try:
        return arr.index(k)
    except ValueError:
        return -1

매개변수 num은 정수형 타입이기때문에 형변환을 하고서 리스트에 담았다.



다른 사람의 풀이

def solution(num, k):
    return -1 if str(k) not in str(num) else str(num).find(str(k))+1

삼항 연산자를 활용해서 효율적인 코드를 만들어 내었다.
나의 코드와 비교하면, 리스트를 담을때 사용한 반복문도 쓸모가 없어지는 셈이다.
또한 나와 달리 값을 탐색하는 메소드를 find를 사용했다.



값을 탐색 하는 메소드

find,index

  • find 메소드
arr = "123"
print(arr.find(str(3)))
print(arr.find(str(4)))

#출력 
2
-1
  • index 메소드
arr = [1,2,3]
print(arr.index(3))
print(arr.index(4))

#출력
3
Value Error

find 메소드는 탐색하는 값이 없다면 -1을 반환하지만
index 메소드는 탐색하는 값이 없다면 Value Error가 발생한다.

따라서, 이 문제의 출제자의 의도는
find 메소드와 index 메소드의 차이점을 잘 알고 사용했음을 의도한게 아니였을까 싶은 마음에
위 지식을 습득하고서 다시 문제를 풀이했다.



나의 최종 풀이

def solution(num, k):
    result = str(num).find(str(k))
    return -1 if result<0 else result +1
profile
더 노력하겠습니다

0개의 댓글