728x90
코딩테스트 연습 - 숫자 찾기 | 프로그래머스 스쿨 (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 |