https://school.programmers.co.kr/learn/courses/30/lessons/155652

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

s에 담긴 스트링을 index만큼 shift하는데 skip에 담긴 글자는 넘어간다.

def solution(s, skip, index):
    answer = ''
    alpha = list('abcdefghijklmnopqrstuvwxyz')
    alphadic = {v:i for i,v in enumerate(alpha)}
    for ch in s:
        idx = alphadic[ch]
        cnt = 0
        while cnt < index:
            idx += 1
            if idx > 25:
                idx = 0
            if alpha[idx] not in skip:
                cnt += 1
        answer += alpha[idx]
            
    return answer


a="aukks"	
b="wbqd"	
c=5
a = "z" 
b = "abcdefghij"
c = 20
solution(a,b,c)

검색할 리스트에서 이미 skip을 제거한후 검색할 리스트에서 index를 사용 shift 하였다.

def solution(s, skip, index):
    alphas = [chr(a) for a in range(ord("a"), ord("z")+1) if chr(a) not in skip]
    return "".join([alphas[(alphas.index(a) + index) % len(alphas)] for a in s])

이 코드를 보고 내 풀이를 좀더 다듬었다.

def solution(s, skip, index):
    answer = ''
    alpha = [ch for ch in 'abcdefghijklmnopqrstuvwxyz' if ch not in skip]
    alphadic = {v:i for i,v in enumerate(alpha) }
    for ch in s:
        answer += alpha[(alphadic[ch] + index) % len(alpha)]      
    return answer

keymap                                 targets               result

["ABACD", "BCEFD"]      ["ABCD","AABB"]     [9, 4]

 

하나의 키를 계속 누르면 알파벳이 달라지는 맵핑을 이용해 targets을 치는데 걸리는 숫자를 출력한다. targets이 keymap에 없다면 -1을 출력한다. 

난 dict의 에러를 try: except:를 이용해 처리했는데

def solution(keymap, targets):
    answer = []
    keydic = {}
    for lst in keymap:
        for i, ch in enumerate(lst):
            try:
                v = keydic[ch]
                if keydic[ch] > i+1:
                    keydic[ch] = i+1
            except:
                keydic[ch] = i+1
                continue
    for lst in targets:
        sum = 0
        for ch in lst:
            try:
                sum += keydic[ch]
            except:
                sum = -1
                break
        answer.append(sum)
    return answer

a=["AA"]
b=["B"]
solution(a,b)

실행1 if ch in dict else 실행2로 깔끔하게 하신분이 있었다. min()을 이용해 한줄에 작성 

def solution(keymap, targets):
    answer = []
    hs = {}
    for k in keymap:
        for i, ch in enumerate(k):
            hs[ch] = min(i + 1, hs[ch]) if ch in hs else i + 1

    for i, t in enumerate(targets):
        ret = 0
        for ch in t:
            if ch not in hs:
                ret = - 1
                break
            ret += hs[ch]
        answer.append(ret)

    return answer

https://school.programmers.co.kr/learn/courses/30/lessons/258712

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

친구들 이름이 있고 선물을 주고 받은 이력이 나온다.

이력을 이용해 선물지수를 작성하고

선물을 많이 한사람은 1점, 같은경우 선물지수가 높은 사람이 1점을 얻어 최대점수를 계산한다,

=["muzi", "ryan", "frodo", "neo"]
b=["muzi frodo", "muzi frodo", "ryan muzi", "ryan muzi", "ryan muzi", "frodo muzi", "frodo ryan", "neo muzi"]
solution(a,b)

 

def solution(friends, gifts):
    answer = 0
    adic = {v:i for i,v in enumerate(friends)}
    num = [[ 0 for i in range(len(friends))] for i in range(len(friends))]
    extra = [ 0 for i in range(len(friends))]
    prize = [ 0 for i in range(len(friends))]
    for sendto in gifts:
        sp = sendto.split()
        num[adic[sp[0]]][adic[sp[1]]] +=  1
        extra[adic[sp[0]]] += 1
        extra[adic[sp[1]]] -= 1
            
    for yi,yv in enumerate(num):
        for xi,xv in enumerate(yv):
            if(yi == xi):
                continue
            if num[yi][xi] > num[xi][yi]:
               prize[yi] += 1
            elif  num[yi][xi] == num[xi][yi]:
                if extra[yi] > extra[xi]:
                    prize[yi] += 1
    answer = max(prize)
    return answer

 

def solution(friends, gifts):
    f = {v: i for i, v in enumerate(friends)}
    l = len(friends)
    p = [0] * l
    answer = [0] * l
    gr = [[0] * l for i in range(l)]
    for i in gifts:
        a, b = i.split()
        gr[f[a]][f[b]] += 1
    for i in range(l):
        p[i] = sum(gr[i]) - sum([k[i] for k in gr])

    for i in range(l):
        for j in range(l):
            if gr[i][j] > gr[j][i]:
                answer[i] += 1
            elif gr[i][j] == gr[j][i]:
                if p[i] > p[j]:
                    answer[i] += 1
    return max(answer)

 

+ Recent posts