오늘은 코테 준비 5일차! 4일차까지는 내가 천재인 줄 알았다. lv1에서 무너지다니..
lv1 마지막 문제들을 풀고있는데 너무 어렵다. 못풀겠어!!!!!!!!!!!!
겨우 정신을 부여잡고 몇 문제 풀어보았다..
1.옹알이(2)
https://school.programmers.co.kr/learn/courses/30/lessons/133499
옹알이하던 시절로 돌아가고싶.. 정신차려!
이 문제는 옹알이하는 아기가 할 수 있는 발음 패턴을 기반으로 발음할 수 있는 단어를 찾는 문제다. 연속해서 같은 발음을 하는 것을 어려워하는 것을 주목하여 알고리즘 작성!
def solution(babbling):
answer = 0
can = ['aya', 'ye', 'woo', 'ma']
for bab in babbling: # babbling의 단어 하나씩 확인
for c in can:
if c * 2 not in bab: # 연속으로 나오지 않으면 공백(' ')으로 대체
bab = bab.replace(c, ' ')
if bab.isspace(): # 공백으로만 이루어져 있으면 answer+1
answer += 1
return answer
2.체육복
https://school.programmers.co.kr/learn/courses/30/lessons/42862
체육복을 도난 당했다! 인원수, 잃어버린 사람, 체육복이 하나 더 있는 사람이 주어질 때 앞뒤사람에게만 체육복을 빌릴 수 있다고 한다. 집합을 통해 중복 제거 후 알고리즘 작성:)
def solution(n, lost, reserve):
answer = 0
reserve_del = set(reserve)-set(lost)
lost_del = set(lost)-set(reserve)
print(reserve_del)
print(lost_del)
for i in reserve_del:
if i-1 in lost_del:
lost_del.remove(i-1)
elif i+1 in lost_del:
lost_del.remove(i+1)
answer = n - len(lost_del)
return answer
3.키패드 누르기
https://school.programmers.co.kr/learn/courses/30/lessons/67256
키패드를 누르는데 왼손이냐 오른손이냐!
1,4,7 왼손 3,6,9 오른손 2,5,8,0 가까운 손.
그렇다면 각 손의 위치를 알아야한다. 좌표로 알고리즘을
작성한다면 이해하기 편할 것이라 생각했다.
def solution(numbers, hand):
answer = ''
# 키패드 좌표료 변경
dic = {1: [0, 0], 2: [0, 1], 3: [0, 2],
4: [1, 0], 5: [1, 1], 6: [1, 2],
7: [2, 0], 8: [2, 1], 9: [2, 2],
'*':[3, 0], 0: [3, 1], '#': [3, 2]}
# 시작 위치
left_s = dic['*']
right_s = dic['#']
for i in numbers:
now = dic[i]
# 1, 4, 7을 누르는 경우 무조건 왼손
if i in [1, 4, 7]:
answer += 'L'
left_s = now
# 3, 6, 9를 누르는 경우 무조건 오른손
elif i in [3, 6, 9]:
answer += 'R'
right_s = now
# 2, 5, 8, 0을 누르는 경우
else:
left_d = 0
right_d = 0
# 좌표 거리 계산해주기
for a, b, c in zip(left_s, right_s, now):
left_d += abs(a-c)
right_d += abs(b-c)
# 왼손이 더 가까운 경우
if left_d < right_d:
answer += 'L'
left_s = now
# 오른손이 더 가까운 경우
elif left_d > right_d:
answer += 'R'
right_s = now
# 두 거리가 같은 경우
else:
# 왼손잡이 경우
if hand == 'left':
answer += 'L'
left_s = now
# 오른손잡이 경우
else:
answer += 'R'
right_s = now
return answer
4.신고 결과 받기
https://school.programmers.co.kr/learn/courses/30/lessons/92334
게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 한다!
def solution(id_list, report, k):
be_reported = {i: set() for i in id_list}
reported = {i: set() for i in id_list}
for i in report:
a, b = i.split()
be_reported[b].add(a)
reported[a].add(b)
return [sum([1 if len(be_reported[j]) >= k else 0 for j in list(i)]) for i in reported.values()]
5.햄버거 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/133502
빵 – 야채 – 고기 - 빵 순서로 포장해야한다.예를 들어, 상수의 앞에 쌓이는 재료의 순서가 [야채, 빵, 빵, 야채, 고기, 빵, 야채, 고기, 빵]일 때, 상수는 여섯 번째 재료가 쌓였을 때, 세 번째 재료부터 여섯 번째 재료를 이용하여 햄버거를 포장하고, 아홉 번째 재료가 쌓였을 때, 두 번째 재료와 일곱 번째 재료부터 아홉 번째 재료를 이용하여 햄버거를 포장합니다. 즉, 2개의 햄버거를 포장하게 됩니다. 몇 개의 햄버거를 포장할 수 있는가?
def solution(ingredient):
s = []
cnt = 0
for i in ingredient:
s.append(i)
if s[-4:] == [1, 2, 3, 1]:
cnt += 1
for _ in range(4):
s.pop()
return cnt