숫자 찾기

2024. 9. 17. 18:00코딩테스트 입문

https://school.programmers.co.kr/learn/courses/30/lessons/120904

 

프로그래머스

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

programmers.co.kr


문제 설명
정수 num과 k가 매개변수로 주어질 때, num을 이루는 숫자 중에 k가 있으면 num의 그 숫자가 있는 자리 수를 return하고 없으면 -1을 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 0 < num < 1,000,000
  • 0 ≤ k < 10
  • num에 k가 여러 개 있으면 가장 처음 나타나는 자리를 return 합니다.

입출력 예

num k result
29183 1 3
232443 4 4
123456 7 -1

입출력 예 설명
입출력 예 #1

  • 29183에서 1은 3번째에 있습니다.

입출력 예 #2

  • 232443에서 4는 4번째에 처음 등장합니다.

입출력 예 #3

    • 123456에 7은 없으므로 -1을 return 합니다.

주어진 숫자 num에서 가장 첫 번째로 등장하는 k의 위치, 즉 인덱스를 구하는 문제입니다.

 

숫자라고 생각해서 굳이 정수형으로 풀 필요 없이, 문자열로 변환해서 구하면 되는 문제입니다.

문자열에는 find 함수가 있어서, find(value)로 value가 등장하는 첫 번째 위치의 인덱스를 구할 수 있습니다. 만약 value가 존재하지 않는다면 -1을 반환합니다.

파이썬으로 문제를 풀어보겠습니다.

def solution(num, k):
    # 문자열 num에서 k가 언제 등장하는지 인덱스를 반환합니다.
    answer = str(num).find(str(k)) + 1
    # 인덱스 값이 0 초과면 그대로, 이하면 -1을 반환합니다.
    return answer if answer > 0 else -1

 

이 문제에서는 0번째 인덱스 값이 1번째 순서라고 설정되어 있기 때문에, answer 값을 find로 구한 다음에 1을 추가해줘야 합니다.

그런데 없는 경우에는 그러면 -1이 0이 되버리죠? 그래서 조건문을 사용해서 0을 넘을 때(즉, find로 값을 구할 수 있을 때)는 그대로 answer을, 0 이하인 경우에는 -1을 반환하면 됩니다.

 

index로도 구할 수 있기는 한데, index에는 없는 경우에는 오류가 발생하기 때문에 find 함수를 사용하는 편이 좋습니다.

따로 처리하는 건 귀찮으니까요.

'코딩테스트 입문' 카테고리의 다른 글

자릿수 더하기  (0) 2024.09.19
n의 배수 고르기  (0) 2024.09.18
배열의 유사도  (0) 2024.09.16
문자열 계산하기  (0) 2024.09.15
가장 큰 수 찾기  (0) 2024.09.14