2024. 9. 17. 18:00ㆍ코딩테스트 입문
https://school.programmers.co.kr/learn/courses/30/lessons/120904
문제 설명
정수 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 함수를 사용하는 편이 좋습니다.
따로 처리하는 건 귀찮으니까요.