cording test

LV.0 숫자 찾기(enumerate, find 함수를 통한 해결)

JM Lee 2023. 3. 31. 20:30
728x90

코딩테스트 연습 - 숫자 찾기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

요즘 프로젝트 시간을 제외하고는 알고리즘에 빠진 것 같다.

문제가 참 어렵지만 그래도 맞출 때 희열이 꽤나 좋다.

 

 


이번 문제는 좀 헤맸다.

처음에 접근을 ANSWER부터 추리하도록 해봤는데,

K가 n번째 숫자와 겹칠 때, 그 숫자는 10**(n+1)이기 때문에

로그를 이용해서 풀 수 있지 않을까라고 생각했다.

그런데 그러면 num을 어떻게 풀어야 할지가 생각나지 않았다.

무작정 num = a*10 + b*10**2 + c*10**3 ... 등으로 구현하는 것은 좀 아닌 것 같아서

결국 로그를 이용한 방식은 포기했다.

 


def solution(num, k):
    for i, n in enumerate(str(num)): # num을 문자열로 만든 다음 그것을 하나씩 나열
        if str(k) == n: # 문자열 중 i번째 순서인k가 n과 같다면
            return i + 1 # i+1을 반환해라. i는 0부터 시작하니깐 i+1 하는 것이 맞다.
    return -1

대신에 enumerate 함수를 사용했다.

저번에 썼던 방식이라 이번엔 안 쓰려고 했지만 다른 방법을 모르겠으니 그냥 썼다.

 


def solution(num, k):
    answer = (str(num).find(str(k))+1) # num 문자열에서 k를 찾아서 거기에 1을 더할 것이다.
    if answer == 0: 
        answer = -1
    return answer
    
    # 그러나 k가 없다면 str(num).find(str(k))는
    find 함수에 따라 자동으로 -1이 된다고 한다.
    따라서 이 가정문은 'k가 없을 경우'라는 뜻을 내포하고 있음.

다른 해답도 봤는데 find 함수라는 것을 사용해서 해결했다.

find 함수는 문자열에서 원하는 문자를 찾아내는 함수인데,

찾아내면 그 숫자의 위치를 번호로 내기 때문에 +1을 진행한다.(컴퓨터는 0부터 시작하니깐)

그런데  없으면 -1을 출력하기 때문에 다음과 같은 조건문을 낼 수 있었던 것!

.

.

다음 주부터는 장고로 들어가니깐 주말에 파이썬 함수를 좀 더 공부해야겠다..!

'cording test' 카테고리의 다른 글

LV.0 가위바위보  (0) 2023.04.07
LV.0 로그인 성공  (0) 2023.04.05
LV.0 배열의 유사도  (1) 2023.03.30
LV.0 : ["최빈값 구하기"]  (0) 2023.03.29
LV.0 : ["세균 증식"], ["OX 퀴즈"]  (2) 2023.03.22