[파이썬] 프로그래머스 LV1 가장 가까운 같은 글자

청수동햄주먹·2023년 2월 8일
0

파이썬코딩테스트

목록 보기
15/35

프로그래머스 가장 가까운 같은 글자

딕트를 활용 하는 문제인데 나는 100%활용하지 못했어서 작성!

첫 시도

def solution(s):
    thisdict = {}
    ans = []
    for i,x in enumerate(s):
        pin = s.index(x)
        if pin == i:
            ans.append(-1)
            thisdict[x] = i
        else: 
            ans.append(i - thisdict[x])
            thisdict[x] = i
    return ans

문제의 부분

  • pin = s.index(x) if pin == i:
    • if x not in thisdict로 해주면 더 빠른 접근..


다른 사람의 풀이

def solution(s):
    answer = []
    dic = dict()
    for i in range(len(s)):
        if s[i] not in dic:
            answer.append(-1)
        else:
            answer.append(i - dic[s[i]])
        	dic[s[i]] = i
    return answer

내보완 코드는 조건문에 상관없이 x마다 딕트를 업데이트 시켜주었다. 하지만 이 코드는 두번째 반복되는 문자부터 최신(?)의 인덱스로 업데이트 시킨다.

첫 시도 보완

def solution(s):
    thisdict = {}
    ans = []
    for i,x in enumerate(s):
        if x not in thisdict:
            ans.append(-1)
            thisdict[x] = i
        else: 
            ans.append(i - thisdict[x])
            thisdict[x] = i
    return ans

성능 비교

첫 시도다른 사람의 풀이조건문을 바꿨을 때
테스트 1 〉통과 (0.01ms, 9.97MB)통과 (0.01ms, 10.1MB)통과 (0.01ms, 10MB)
테스트 2 〉통과 (0.03ms, 10.2MB)통과 (0.02ms, 10MB)통과 (0.03ms, 10.3MB)
테스트 3 〉통과 (0.04ms, 10.1MB)통과 (0.02ms, 10.2MB)통과 (0.03ms, 9.96MB)
테스트 4 〉통과 (0.24ms, 10.1MB)통과 (0.17ms, 10.2MB)통과 (0.22ms, 10.4MB)
테스트 5 〉통과 (3.92ms, 10.9MB)통과 (1.77ms, 10.9MB)통과 (1.44ms, 10.9MB)
테스트 6 〉통과 (1.80ms, 10.3MB)통과 (0.68ms, 10.3MB)통과 (0.94ms, 10.5MB)
테스트 7 〉통과 (4.19ms, 11.1MB)통과 (1.59ms, 10.9MB)통과 (2.20ms, 11MB)
테스트 8 〉통과 (0.96ms, 10.4MB)통과 (0.52ms, 10.3MB)통과 (0.48ms, 10.3MB)
테스트 9 〉통과 (2.21ms, 10.8MB)통과 (1.50ms, 10.8MB)통과 (2.70ms, 10.6MB)
테스트 10 〉통과 (0.45ms, 10.3MB)통과 (0.34ms, 10.3MB)통과 (0.25ms, 10.3MB)
테스트 11 〉통과 (2.26ms, 10.7MB)통과 (1.47ms, 10.6MB)통과 (1.20ms, 10.9MB)
테스트 12 〉통과 (0.01ms, 10.2MB)통과 (0.00ms, 9.93MB)통과 (0.00ms, 10MB)
테스트 13 〉통과 (0.01ms, 10.2MB)통과 (0.01ms, 10MB)통과 (0.01ms, 10MB)
테스트 14 〉통과 (0.12ms, 9.99MB)통과 (0.14ms, 10.2MB)통과 (0.07ms, 10MB)
테스트 15 〉통과 (0.01ms, 9.98MB)통과 (0.00ms, 10.1MB)통과 (0.01ms, 10.1MB)
테스트 16 〉통과 (0.03ms, 10.1MB)통과 (0.01ms, 10.1MB)통과 (0.01ms, 10.1MB)
테스트 17 〉통과 (0.02ms, 10.1MB)통과 (0.01ms, 10.1MB)통과 (0.02ms, 10.3MB)
테스트 18 〉통과 (0.75ms, 10.2MB)통과 (0.30ms, 10.1MB)통과 (0.25ms, 10.1MB)
테스트 19 〉통과 (0.55ms, 10.3MB)통과 (0.35ms, 10.3MB)통과 (0.51ms, 10.5MB)
테스트 20 〉통과 (0.10ms, 10MB)통과 (0.07ms, 9.99MB)통과 (0.11ms, 10.1MB)
테스트 21 〉통과 (0.03ms, 10.1MB)통과 (0.02ms, 10.2MB)통과 (0.03ms, 10.2MB)
테스트 22 〉통과 (1.30ms, 10.4MB)통과 (0.76ms, 10.2MB)통과 (0.66ms, 10.3MB)
테스트 23 〉통과 (0.10ms, 10.1MB)통과 (0.07ms, 10.1MB)통과 (0.11ms, 10.1MB)
테스트 24 〉통과 (0.25ms, 10.1MB)통과 (0.10ms, 10MB)통과 (0.18ms, 10.1MB)
테스트 25 〉통과 (0.18ms, 10.1MB)통과 (0.13ms, 10.1MB)통과 (0.10ms, 10.1MB)
테스트 26 〉통과 (0.04ms, 10.2MB)통과 (0.05ms, 10.3MB)통과 (0.04ms, 10MB)
테스트 27 〉통과 (0.18ms, 10.2MB)통과 (0.13ms, 10.4MB)통과 (0.11ms, 10.2MB)
테스트 28 〉통과 (0.16ms, 10.1MB)통과 (0.19ms, 10MB)통과 (0.09ms, 10.2MB)
테스트 29 〉통과 (0.00ms, 10.1MB)통과 (0.01ms, 10MB)통과 (0.00ms, 10.1MB)
테스트 30 〉통과 (2.40ms, 10.9MB)통과 (1.67ms, 10.9MB)통과 (1.36ms, 10.9MB)
  • 보완 코드가 첫 시도보다 확실히 빠름
  • 업치락 뒤치락하는 성능을 보여주는 다른 사람의 코드와 보완코드
profile
코딩과 사별까지

0개의 댓글