-
파이썬 - 문자열 내 반복되는 문자 위치 비교문제풀이/PYTHON 2024. 5. 10. 16:39
코딩테스트 연습 - 가장 가까운 같은 글자 | 프로그래머스 스쿨 (programmers.co.kr)
def solution(S): K = [] Q = {} # R = [] # Q[S[0]] = 0 K.append(-1) for i_1, s_1 in enumerate(S) : for s_2, i_2 in Q.items() : if s_2 == s_1 : K.append(i_1 - i_2) Q[s_2] = i_1 elif s_1 not in list(Q.keys()) : Q[s_1] = i_1 K.append(-1) return K
이리 저리 가지고 굴리다가
파이썬에서도 in, not in 이 가능한 것을 알고 다시 갈아 엎어야함을 알게 된 코드
그리고 Q.keys() 와 같이 반복문 내에서 변형되는 경우는 파이썬이 오류를 뱉는다
RuntimeError: dictionary changed size during iteration
def solution(S): K = [] Q = {} for i_1, s_1 in enumerate(S) : if s_1 in Q : K.append(i_1 - Q[s_1]) else : K.append(-1) Q[s_1] = i_1 return K
엎기는 귀찮고 하는 방법을 알고 있어서 gpt에게 위의 코드만 던져주니 너무 길고 이상한 코드라며 요약해서 뱉은 코드
1) in으로 조건문 성립
2) 아니면 답은 어차피 -1
3) dict 을 이용한 문자 위치 갱신
def solution(S): Q = {} return [i - Q.setdefault(s, i) if (Q := Q.copy()).pop(s, None) is not None else -1 for i, s in enumerate(S)]
dict.setdefault(a,b)
dict 내 item이 존재하지 않을 시 대신 작동하는 대표값 a,b 사용 및 추가
dict := dict.copy()
Python 3.8부터 지원되는 walrus 연산자를 사용한 구문
이 구문은 Q를 복사하여 새로운 사전을 만들고, 그것을 Q에 다시 할당합니다. 이렇게 함으로써 원본 사전 Q를 변경하지 않으면서 사전을 복제합니다.
이 구문은 대개 반복문 내에서 불필요한 반복에서의 사전 변형을 방지하기 위해 사용됩니다. 다시 말해, 반복문 내에서 사전을 변경하면 예기치 않은 동작을 유발할 수 있지만, 이 구문을 사용하면 사전을 복제하여 이러한 문제를 해결할 수 있습니다.
위의 오류문을 회피할 수 있는 장치.
'문제풀이 > PYTHON' 카테고리의 다른 글
파이썬 - limit 3 추출 (0) 2024.05.13 문자열 슬라이스 (0) 2024.05.03 파이썬 - 리스트 내 n개 값 추출 (0) 2024.04.26 파이썬 - while (1) 2024.04.26 파이썬 - 행렬 덧셈 (0) 2024.04.22