[프로그래머스/python] 코딩테스트 연습 Lv.1 (6월 네 번째 주 2)
둘만의 암호
문제 설명
입출력 예
문자열 : 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