기타/Python

250715_파이썬(enumerate 코드타카 풀이)

baektree 2025. 7. 15. 21:26

오늘은 어려웠던 코드타카 문제 위주로 TIL을 작성해본다.

코드타카 enumerate(인덱스와 값을 같이 출력해주는 문제)

  • 문제
  • 나의 풀이
    • 앞에 같은 문자가 있으면 얼만큼 떨어져 있는지, 인덱스라는 개념을 통해 깨달았지만 그걸 어떻게 구현할지 헤맸다.
    • 가령 “banana”일 때 두번째 ‘a’의 경우 인덱스 3-1하면 된다.
    • 두번째 ‘a’ 인덱스 3 - 첫번째 ‘a’ 인덱스 1 = 2 이이다.
def solution(s):
    answer = [] #숫자(값)을 담을 리스트
    words = [] #문자 값을 담을 리스트
    for w in s:
      if w not in words:
        answer.append(-1)
        words.append(w)
      elif w in words:
        searched_index = s.index(w)
        result = searched_index - 1
        answer.append(result)
    return answer

solution("banana")
  • 문제 구조화
    • 앞의 글자가 없으면 -1 출력
    • 앞의 글자가 있으면
      • 두번째 인덱스 - 첫번째 인덱스의 값 출력 (ex a는 자신보다 두 칸 앞에 a가 있다. = 차이 = 인덱스간의 차)
  • 핵심 풀이
    • 인덱스, 값을 같이 출력하는 enumerate 함수 사용
    • 각 글자의 반복 횟수를 파악해야 하므로 문자 별 인덱스를 담는 딕셔너리 활용
    • 즉 이미 딕셔너리 안에 같은 문자가 있다면 인덱스끼리의 차를 출력
def solution(s):
		answer = [] #정답을 출력할 빈 리스트
		word_index = {} #문자의 인덱스를 파악할 빈 딕셔너리
		for i ch in emuerate(s):
				if ch in word_index: #문자가 딕셔너리에 있다면?
					answer.append(i - word_index[i])
				
				else:
					answer.apppend(-1)
				word_index[ch] = i #각 문자 별 인덱스 딕셔너리 형태로 담기
		return answer
		
# order_index = {'b':0, 'n':1, 'a':2, 'n':}

-i-ch--word_index-------------
# 0 b {'b':0}
# 1 a  {'b':0, 'a':1}
# 2 n  {'b':0, 'a':1 'n':2}
# 3 a  {'b':0, 'a':1 'n':2, 'a':3}

 

 

코드타카 emunerate, value[::-1]

def solution(food):
    answer = ''
    for i, ch in enumerate(food):
      num = ch // 2 
      if num != 0:
          counted = str(i)*num
          answer += counted
    reversed_answer = answer[::-1]
    result = answer + '0' + reversed_answer
    return result
  • 풀이과정
    • 다른 사람의 풀이 1️⃣
      • 문자열 누적 대신 리스트로 모아두고 마지막에 ''.join()으로 합치기
      • left = [ ‘1’, ‘22’, ‘333’ ]
      • left_str = ‘’join[left]
      • ''.join() : 리스트 안에 있는 문자요소들을 하나의 문자열로 합쳐준다.
      def solution(food):
          left = []
          for i, ch in enumerate(food):
              left.append(str(i) * (ch // 2))
          left_str = ''.join(left)
          return left_str + '0' + left_str[::-1]
      
    • 다른 사람의 풀이 2️⃣
      • 리스트 컴프리헨션 + join 한 줄 요약
      • 위 풀이를 한 줄로 줄이기
      def solution(food):
      		half = ''.join([str(i) * (ch // 2) for i, ch in enumerate(food)])
      		return half + '0' half[::-1]