[스파르타코딩클럽]데이터분석 과정/PYTHON

[Python 코드카타] 64 ~ 66번 (프로그래머스)

doo_ 2024. 1. 29. 14:25

64번 체육복

def solution(n, lost, reserve):
    answer = 0
    # 여벌을 가져왔지만 도난을 당한 경우 
    lo = set(lost)-set(reserve)
    re = set(reserve)-set(lost)
    # 여별을 앞 또는 뒤 친구에게 빌려주는 경우
    for i in re :
        if i-1 in lo:
            lo.remove(i-1)
        elif i+1 in lo:
            lo.remove(i+1)
    # n - 결국 빌리지 못한 학생수
    answer = n - len(lo)
    return answer

 

65번 문자열 나누기

def solution(s):
    # 1) 기본값 세팅
    answer = 0
    cnt1 = 0
    cnt2 = 0
    for word in s :
        if cnt1 == 0 : # 1) 처음 기준이 되는 word 선택 
            a = word
        if word == a : # 2) 처음 선택된 단어 cnt1에 +1
            cnt1 += 1
        else: # 3) 선택된 단어와 다른 단어는 cnt2에 +1
            cnt2 += 1
        if cnt1 == cnt2: # 4) 그렇게 과정을 거치면서 cnt1와 cnt2가 같아지면 answer에 +1
            answer += 1
            # 5) 다시 초기화
            cnt1 = 0
            cnt2 = 0
    # 6) 만약 모든 과정을 거친 다음에도 없다면 return 1
    if cnt1 > 0:
        answer += 1
    return answer

> 좀 더 간결한 답안

def solution(s):
    answer = 0
    sav1=0
    sav2=0
    for i in s:
        if sav1==sav2:
            answer+=1
            a=i
        if i==a:
            sav1+=1
        else:
            sav2+=1
    return answer

 

66번 대충 만든 자판

def solution(keymap, targets):
    answer = []
    for target in targets : # 1) 우선 targets[] 분리해서 순서대로
        click = 0    
        for word in target : # 2) targets안의 word들을 순서대로 확인
            # 6) 처음 클릭수 비교를 위한 기본값 세팅
            # 7) 만약 해당 단어가 없을 때를 위한 기본값 세팅
            cnt = 101 
            check = False
            for key in keymap : # 3) 각 word가 각 keymap에 속하는지 파악
                if word in key :
                    cnt = min(key.index(word)+1, cnt)
                    # 4) 속한다면 해당 index+1을 하여 클릭수 계산
                    # 5) 비교문을 추가하는 대신 min(A,B)를 통해 keymap[0]과 keymap[1] 중
                    # 적은 클릭수 선택
                    check = True
            # 8) 한 과정이 끝나고도 check가 false라는 건 해당 단어가 없다는 뜻
            if not check :
                click = -1
                break
            # 9) 각 word에 대한 클릭수를 더해준다.
            click += cnt
        # 10) 모두 더한 클릭수를 리스트에 추가
        answer.append(click)
    return answer