View

문제 설명

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


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

입출력 예numkresult
29183 1 3
232443 4 4
123456 7 -1

입출력 예 설명

입출력 예 #1

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

입출력 예 #2

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

입출력 예 #3

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

나의 풀이

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

다른 풀이

find() 함수는 찾는 문자가 문자열내에 있으면, 해당 자리의 수를 반환하고, 문자가 없으면 -1을 반환한다.
아래와 같이 코드를 짤 수 도 있겠지만, 

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

 문자가 없으면 -1을 반환하는 것을 사용하고, 아래처럼 짤 수도 있다!

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

find(찾을 문자 , 탐색시작인덱스 ,탐색종료인덱스 ) 

str= "BlockDMask Blog.";
print(f"str : {str}\n")

# find 예제1
print("1. str.find('찾을 문자')")
result1 = str.find('a')   # 문자가 있는 경우
result2 = str.find('Z')   # 문자가 없는 경우

print(f"str.find('a') : {result1}")
print(f"str.find('Z') : {result2}")

result3 = str.find('ask') # 문자열이 있는 경우
result4 = str.find('kkk') # 문자열이 없는 경우

print(f"str.find('ask') : {result3}")
print(f"str.find('kkk') : {result4}")
print()


# find 예제2
print("2. str.find('찾을 문자', 시작index)")
result5 = str.find('o')
result6 = str.find('o', 5)

print(f"str.find('o') : {result5}")

print(f"str[5] : {str[5]}")
print(f"str.find('o', 5) : {result6}")
print()


# find 예제3
print("3. str.find('찾을 문자', 시작 index, 끝 index)")
result7 = str.find('o')
result8 = str.find('o', 5, 11)  # "DMask B"

print(f"str.find('o') : {result7}")

print(f"str[5]~str[11] : {str[5]} ~ {str[11]}")
print(f"str.find('o', 5, 11) : {result8}")

1번째 테스트 - str.find('찾을 문자')
str.find('a')는 "BlockDMask Blog" 라는 문자열에서 a라는 것의 위치가 index : 7 이기 때문에 7이 반환된것을 볼 수 있습니다.
str.find('Z')는 "BlockDMask Blog"에서 존재하지 않는 문자이기 때문에 -1 이 반환 되었습니다.

str.find('ask')는 "BlockDMask Blog" 문자열에 존재하므로 "ask"의 맨 첫번째 index인 a가 있는 위치의 index 인 7을 반환 한 것을 볼 수 있습니다.
str.find('kkk') 해당 문자열이 없으므로 -1을 반환하였습니다.

 

2번째 테스트 - str.find('찾을 문자', 시작 index)
str.find('o')는 "BlockDMask Blog" 문자열에서 'o'는 두개가 존재하는데 첫번째 o의 위치인 2를 반환하는 것을 볼 수 있습니다.
str.find('o', 5) 를 통해서 서치할 시작 index의 위치를 수정해주면 "BlockDMask Blog" 해당 문자열의 index 5의 위치인 "D" 부터 서치를 하기 때문에 전체 문자열 기준으로 두번째 'o'의 위치인 13이 나오는 것을 볼 수 있습니다.

 

3번째 테스트 - str.find('찾을 문자', 시작 index, 끝 index)
str.find('o', 5, 11) 을 보면 "BlockDMask Blog"문자열에서 str[5]~str[11]에 해당하는 문자들은 "DMask B" 이기 때문에 해당 문자열 내부에는 find 할 'o'가 존재하지 않습니다. 
그렇기 때문에 해당 함수의 결과는 -1이 나오게 됩니다.

 

Reference

https://blockdmask.tistory.com/569

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

programmers) 평행  (0) 2022.11.08
programmers) 인덱스 바꾸기  (0) 2022.11.08
programmers) 외계행성의 나이  (0) 2022.11.08
programmers) 배열 회전시키기  (0) 2022.11.07
programmers) 주사위의 개수  (0) 2022.11.07
Share Link
reply
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31