알고리즘 마지막 5일차 문제가 길어지고 이해하는데 어렵다. 시간이 너무 오래 길어져서 답안을 보고 최대한 이해하보려 한다.
def solution(lottos, win_nums):
rank = [6,6,5,4,3,2,1]
min = len(set(lottos)&set(win_nums))
max = len(set(lottos)&set(win_nums))+lottos.count(0)
return [rank[max],rank[min]]
7등이 존재하지 않기 때문에 6등을 두 개로 한다. lottos와 win_nums에서 교집합 set을 이용해 값을 저장하고 max에 0의 개수와 함께 저장한 후 다시 rank에서 찾아주면 된다.
def solution(answers):
std1 = [1,2,3,4,5]
std2 = [2,1,2,3,2,4,2,5]
std3 = [3,3,1,1,2,2,4,4,5,5]
score = [0, 0, 0]
for i in range(len(answers)):
if answers[i] == std1[i]:
score[0] += 1
if answers[i] == std2[i%8]:
score[1] += 1
if answers[i] == std3[i%10]:
score[2] += 1
answer = []
for idx, num in enumerate(score):
if num == max(score):
answer.append(idx+1)
return answer
문자열 내 마음대로 정렬하기
https://programmers.co.kr/learn/courses/30/lessons/12915
def solution(strings, n):
answer = sorted(strings, key=lambda x: (x[n],x))
return answer
lambda를 이용해 쉽게 풀 수 있다. 답안을 봤는데 처음에 lambda가 전혀 이해가 가지 않았다. 나중에 한번 더 볼 예정..
문자열 내림차순으로 배치하기
https://programmers.co.kr/learn/courses/30/lessons/12917
def solution(s):
answer = ''
s_list = []
for i in s:
s_list.append(i)
s_list.sort()
s_list.reverse()
answer = "".join(s_list)
return answer
유일하게 어렵지 않았던 문제 for를 이용해 list에 넣어주고 sort 다음 reverse 다음 다시 문자열 정렬
숫자 문자열과 영단어
https://programmers.co.kr/learn/courses/30/lessons/81301
def solution(s):
answer = 0
num= {"zero": "0", "one":"1", "two":"2","three":"3","four":"4","five":"5","six":"6",
"seven":"7","eight":"8","nine":"9"}
if s.isdigit():
answer = int(s)
else:
for i,j in num.items():
s = s.replace(i,j)
answer = int(s)
return answer
문제를 이해했고 풀 수 있을 거 같았으나 시간이 너무 오래 지나갔다. 할 수 없이 답안코드를 보며 공부했다. 나도 num에 key, value 설정하여 풀려고 했으나 그 다음 생각이 않나서 답안코드를 봤다. s에 숫자로만 되어있을 시 바로 s를 return해주고 아니면 for를 사용해 key,value를 받아온 다음 s를 바꾸어주었다.
37, 39, 40번 문제는 아직 하지 못했다. 특히나 39번 시저암호 40번 신규아이디는 꽤 복잡하다. 알고리즘주가 끝났지만 알고리즘을 여기서 그만두는게 아니라 하루에 한 문제씩 꼭 풀어봐야겠다.