프로그래머스(파이썬)

    가장 가까운 글자→ 다중 index를 이용★★

    나의 풀이 def solution(s): str=list(s) result=[-1,] for i in range(2, len(str)+1): new_str = str[:i] last=new_str[-1] rest_list = list(filter(lambda x: new_str[x] == last, range(len(new_str)))) if len(rest_list) ==1: result.append(-1) else: result.append(rest_list[-1]-rest_list[-2]) # print(result) return result 다른 사람의 풀이 def solution(s): answer = [] for i in range(len(s)): #i는 큰 idx = -1 for j in r..

    완주하지 못한 선수→ Hash 또는 Counter함수

    다른 사람의 풀이1(해시를 이용하는경우) def solution(participant, completion): hashDict = {} sumHash =0 #1. participant list의 hash를 구하고, hash값을 더한다. for part in participant: hashDict[hash(part)]=part sumHash +=hash(part) #2. completion list의 hash를 빼준다. for comp in completion: hashDict[hash(comp)]=comp sumHash =hash(comp) #3.남은 값은 완주하지 못한 선수의 hash값이 된다. return hashDict[sumHash] ▶ 참가 선수들의 각 Hash값을 전부 더하고, 완주한 선수들의..

    다트 게임→ 정규식, findall(), recompile() + 스택을 표방한 리스트

    다른 사람의 풀이 1 import re def solution(dartResult): bonus = {'S' : 1, 'D' : 2, 'T' : 3} option = {'' : 1, '*' : 2, '#' : -1} # \d는 숫자를 의미, [a-zA-Z]는 알파벳을 의미, ([*|#]?)는 특수 문자를 의미한다. #'?'가 Quantifier 중의 하나인데, # 0이나 1을 나타내는 연산자이다. 해당 특수문자가 없는 경우 ""을 반환하고, 해당 특수문자가 있으면 한 개만 있을 때만 돌려달라는 의미 # 괄호 1개가 튜플의 1개의 요소가 된다. # 즉 p1은 소괄호가 2개이므로 요소가 2개가 나오고, p2는 소괄호가 3개 이므로 요소가 3개가 나온다. p = re.compile('(\d+)+([SDT])+..

    체육복→ 앞에 확인하고, 뒤에 확인하고, set의 차집합(-)★

    나의 풀이 def solution(n, lost, reserve): # 1. Set을 만든다. lost와 reserve에 동시에 속에 있는 학생을 제외 reserve_only =set(reserve)-set(lost) lost_only = set(lost) - set(reserve) # 2. 여분을 기준으로 앞뒤를 확인하여 체육복을 빌려준다. for reserve in reserve_only: front= reserve-1 back =reserve+1 if front in lost_only: #항상 앞 먼저 확인하고, 앞에서 여벌을 주었을 때 그 학생번호를 제거하기 때문에 동일학생에 대하여 체육복을 2개주는 경우는 없다. lost_only.remove(front) elif back in lost_only..