Python/알고리즘 문제 풀이

[코테] 숫자 찾기

마이구미+ 2023. 4. 10. 21:28

<로직 고민>

  • 일단 for문을 돌리고 if문으로 k와 같은 글자가 있는지 찾아야겠군
  • 그리고 그 숫자의 인덱스를.....찾아야 하는데 흠...리스트로 변환해야 하나?
  • enumulate인가 그거 써야 하나?
def solution(num, k):
    for number, i in enumerate(num):
        if num == number:
            return num[i]
  • 이렇게 짜봤는데 TypeError: 'int' object is not iterable 라는 에러가 나온다
  • iterable은 '반복할 수 있는'은 뜻이군
  • 리스트로 변환해야 하는군!!!
  • 정수를 리스트로 변환하는 건 좀 복잡한 것 같다..
  • 그리고 enumulate는 여기서 쓰는 게 아닌 것 같다
  • 이유는 모르겠는데 자꾸 None이 나와서 ...후
  • 결국 풀기는 풀었다

<완성된 코드>

def solution(num, k):
    answer = 0
    num_list = list(map(int, str(num))) # 정수형인 num을 리스트로 변환
    for number in num_list:             # 리스트가 된 num_list를 for문에 돌려 값을 하나씩 꺼냄
        answer += 1                     # for문을 한 번씩 돌 때마다 1을 더해줌->자릿수가 됨
        if k in num_list:               # num_list에 매개변수 k가 있는 경우
            if number == k:             # num_list 속 number와 k가 같으면
                return answer           # answer 반환(자릿수)
        else:                           # num_list에 매개변수 k가 없는 경우
            return -1                   # -1을 반환함


print(solution(29183, 2))
print(solution(232443, 4))
print(solution(123456, 7))

# 출력화면
# 1
# 4
# -1

<다른 사람 코드>

- 천재풀이1

def solution(num, k):
    return -1 if str(k) not in str(num) else str(num).find(str(k)) + 1
  • 이런 코드...이젠 싫다......너무 허무해짐...ㅜ
  • 하지만 '오호 이렇게도 풀 수 있구나!!!'하는 마음이 더 큼ㅋㅋㅋ
  • 문자열의 위치를 반환하는 함수 find...오키
  • +1을 한 이유는 인덱스가 0부터 시작하기 때문이겠지! 오키

- 천재풀이2

def solution(num, k):
    for i, n in enumerate(str(num)):
        if str(k) == n:
            return i + 1
    return -1
  • 앗 enumerate 쓸 수 있구나.....
  • 나는 아직도 enumrate를 어떻게 활용해야 하는지 모르는 거 같다..ㅋㅋㅋ
  • 진짜 계속 None 나와가지고 막 n[i] +1 했다가 int(i) + 1 했다가 암튼 별 걸 다 넣었는데 후 저렇게 쓸 생각은 못하다니...