Python/코딩테스트

[프로그래머스/python] 코딩테스트 연습 Lv.1 (6월 네 번째 주 2)

김과분 2023. 6. 24. 19:31
728x90

둘만의 암호

문제 설명

입출력 예

문자열 : aukks

skip해야할 알파벳 : wbqd

건너뛰는 횟수 : 5

a - b - c - d - e - f - g - h

u - v - w - x - y - z - a

k - l - m - n - o - p

k - l - m - n - o - p

s - t - u - v - w - x - y

aukks -> happy

 

Solution

def solution(s, skip, index):
    answer = ''
    alpha = []
    for i in range(26): # skip하는 알파벳을 제외한 알파벳 리스트 alpha[] 만들기
        if chr(i+97) in skip: # skip에 chr(i+97)이 있다면 넘기기
            continue
        else:
            alpha += chr(i+97) # skip에 포함되지 않으면 alpha[]에 추가
    for i in s: 
        find = alpha.index(i) # alpha[]에서 s의 알파벳 인덱스 find에 저장
        answer += alpha[(find + index) % (len(alpha))] # find보다 index만큼 뒤에 있는 alpha[] 값 도출
        # 이때, find+index가 alpha[] 배열을 넘어가면 다시 처음으로 돌아오도록 %(len(alpha))
    return answer

alpha = [a, c, e, f, g, h, i, j, k, l, m, n, o, p, r, s, t, u, v, x, y, z] -> w, b, q, d 없음, alpha 길이 = 22

a를 alpha에서 찾기 -> find = 0 -> alpha[(0+5)%22] = alpha[5] = h -> answer = 'h'

u를 alpha에서 찾기 -> find = 17 -> alpha[(17+5)%22] = alpha[0] = a -> answer = 'ha'

k를 alpha에서 찾기 -> find = 8 -> alpha[(8+5)%22] = alpha[13] = p -> answer = 'hap'

k를 alpha에서 찾기 -> find = 8 -> alpha[(8+5)%22] = alpha[13] = p -> answer = 'happ'

s를 alpha에서 찾기 -> find = 15 -> alpha[(15+5)%22] = alpha[20] = y -> answer = 'happy'

 

Result

 

체육복

문제 설명

체육복 있는 학생만 체육수업 들을 수 있음 / 번호 : 체격순

읽어버린 학생은 본인의 앞 또는 뒷번호의 친구에게만 여벌을 빌릴 수 있음

체육수업 들을 수 있는 학생 수는?

 

마지막 제한사항이 중요함! 여벌을 갖고온 애가 하나를 읽어버리면 본인이 여벌을 입고, 다른사람 빌려줄 수 없음!

입출력 예

n : 전체 학생수

lost : 읽어버린 학생

reserve : 여분 있는 학생

 

ex1) 현재 체육수업 들을 수 있는 학생 수 = 5-2 = 3

학생 2 : 학생 1에게 빌리면 됨

학생 4 : 학생 3에게 빌리면 됨

빌린 후에 체육수업 들을 수 있는 학생 수 = 5

Solution

def solution(n, lost, reserve):
    answer = n-len(lost) # 현재 체육수업 들을 수 있는 학생 수
    lost.sort() # 잃어버린 학생 번호를 오름차순 정렬
    for i in range(len(lost)):
        if lost[i] in reserve: # 여벌 있는 학생이 잃어버린 경우 먼저 고려
            reserve.remove(lost[i]) # 여벌 있는 학생 리스트에서 삭제
            answer+=1 # 체육수업 들을 수 있는 학생 추가
        elif lost[i]-1 in reserve: # 잃어버린 학생에서 앞 번호가 여벌 있는 경우
            reserve.remove(lost[i]-1)
            answer+=1
        elif lost[i]+1 in reserve and lost[i]+1 not in lost:
        # 잃어버린 학생에서 뒷 번호가 여벌이 있으면서, 그 학생이 잃어버리지 않은 경우
        # 여벌있는 학생이 잃어버렸으면 본인이 본인 여벌을 입어야하므로 pass됨
            reserve.remove(lost[i]+1)
            answer+=1
    return answer

n = 5

lost = [2, 4]

reserve = [1, 3, 5]

 

answer = 5 - len(lost) = 5 - 2 = 3

lost.sort() -> [2, 4]

2-1이 reserve 안에 있음 -> reserve = [3, 5], answer = 3+1 = 4

4-1이 reserve 안에 있음 -> reserve = [5], answer = 4+1 = 5

-> answer = 5

 

Result

728x90