[복서 정렬하기]-[6주차 위클리 챌린지]
My answer
def solution(weights, head2head):
wins, con1, tmp2 = [], [], []
tmp=0
for i in range(len(head2head)):
# (승률= 이긴경기 / 전체경기)을 저장
if('W' in head2head[i])or('L' in head2head[i]):
wins.append(head2head[i].count('W')/(len(head2head)-head2head[i].count('N')))
else:
wins.append(0.0)
# 자기보다 몸무게 높은사람한테 이긴횟수를 저장
for j in range(len(weights)):
if(weights[j]>weights[i] and head2head[i][j]=='W'):
tmp+=1
con1.append(tmp)
tmp=0
# 2중 리스트로 하나의 리스트에 승률,무거운사람한테 이긴횟수, 몸무게, 번호로 저장
for i in range(len(head2head)):
tmp2.append([wins[i],con1[i],weights[i],i+1])
# 이제 정렬된 tmp2에서 번호만 1씩 더해서 출력하면 끝
return [i[3] for i in sorted(tmp2,key=lambda x:(-x[0],-x[1],-x[2],x[3]))]
[2016년]
My answer
def solution(a, b):
month=[31,29,31,30,31,30,31,31,30,31,30,31]
day=['THU','FRI','SAT','SUN','MON','TUE','WED']
tmp=sum(month[:a-1])+b
return day[tmp%7]
[두개 뽑아서 더하기]-[월간 코드 챌린지 시즌 1]
def solution(numbers):
answer = set()
for i in range(len(numbers)):
for j in range(i+1,len(numbers)):
answer.add(numbers[i]+numbers[j])
return sorted(list(answer))
더보기
마지막 return에서 list(sorted(answer))을 하면 답이 안나오는데, 이유는 집합을 정렬하면 음수는 마지막으로 정렬된다. 따라서 먼저 리스트로 변환해준뒤 정렬해야 올바르게 정렬이 된다.
[예산]-[Summer/Winter Coding(~2018)]
My answer
def solution(d, budget):
for i in range(len(d)):
if(sum(d)>budget):
d.remove(max(d))
else:
return len(d)
Another answer
def solution(d, budget):
d.sort()
while budget < sum(d):
d.pop()
return len(d)
----------------------------------------
def solution(d, budget):
d.sort()
answer=0
for i in d:
if budget < i:
break
budget-=i
answer+=1
return answer
더보기
첫번째 코드는 나랑 같은 방법을 이용했는데, sort를 하고 난 뒤에 계산해서 max를 계속 구해줄 필요가 없다.
즉 내 코드보다 효율성이 좋다.
두번째 코드는 sum도 사용하지 않아서 위의 두 코드보다 효율성이 더 좋다
[3진법 뒤집기]-[월간 코드 챌린지 시즌 1]
My answer
def solution(n):
answer = 0
tmp=[]
while(n!=0):
tmp.append(n%3)
n//=3
for i in range(len(tmp)):
answer+=3**(len(tmp)-i-1)*tmp[i]
return answer
Another answer
def solution(n):
tmp = ''
while n:
tmp += str(n % 3)
n = n // 3
# int함수를 이용하여 int(해당진법문자열,해당진법)을 정수=10진법수로 변환해준다.
answer = int(tmp, 3)
return answer
[약수의 갯수와 덧셈]-[월간 코드 챌린지 시즌 2]
My answer
def solution(left, right):
answer = count = 0
for i in range(left,right+1):
for j in range(1,i+1):
if(i%j==0):
count+=1
# 아래 if/else문을 한줄로 요약할 수 있담
answer+=i if count%2==0 else -i
# if(count%2==0):
# answer+=i
# else:
# answer-=i
count=0
return answer
Another answer
def solution(left, right):
answer = 0
for i in range(left,right+1):
# 약수의 개수가 홀수려면 제곱수라는 것을 이용한 방법
if int(i**0.5)==i**0.5:
answer -= i
else:
answer += i
return answer
[실패율]-[2019 KAKAO BLIND RECRUITMENT]
My answer
def solution(N, stages):
answer = []
fail = []
total = 0
for i in range(1,N+1):
for j in range(len(stages)):
# 해당스테이지를 도전한 총 사용자 수 계산
if(stages[j]>=i):
total+=1
# 해당 스테이지를 아직 클리어하지 못한사람 / 해당스테이지를 도전한 총 사용자수
# 스테이지를 아무도 못도달했으면 total=0이라서 0으로 나눌 수 없으므로 실패율을 0으로 넣는다
if(total!=0):
fail.append(stages.count(i)/total)
else:
fail.append(0)
total=0
# 스테이지랑 실패율을 리스트로 합침
for i in range(N):
answer.append([i+1,fail[i]])
return [i[0] for i in sorted(answer,key=lambda x:(-x[1],x[0]))]
Another answer
def solution(N, stages):
answer = []
fail = []
info = [0] * (N + 2)
for stage in stages:
# 해당 스테이지에 몇명이 머무는지를 info에 저장
info[stage] += 1
for i in range(N):
# be에 해당 스테이지에 도전한 사람들을 저장
be = sum(info[(i + 1):])
# yet에 해당 스테이지를 못깬 사람을 저장
yet = info[i + 1]
if be == 0:
fail.append((str(i + 1), 0))
else:
fail.append((str(i + 1), yet / be))
return [int(i[0]) for i in sorted(fail,key=lambda x:-x[1])]
----------------------------------------------------------------------
def solution(N, stages):
result = {}
denominator = len(stages)
for stage in range(1, N+1):
if denominator != 0:
count = stages.count(stage)
result[stage] = count / denominator
denominator -= count
else:
result[stage] = 0
return sorted(result, key=lambda x : result[x], reverse=True)
더보기
내 코드보다 아래 코드가 훨씬 시간이 빨리걸린다. 우선 나는 중첩반복문에다가 모든수를 비교하는 경우까지 하기때문에 효율성이 매우떨어지는데 아래 코드는 그냥 리스트를 만들어두고 거기다가 하나씩 카운팅해서 더했다.
728x90
반응형
'코딩테스트 > 프로그래머스[Python]' 카테고리의 다른 글
[프로그래머스] 09/17 (6) (0) | 2021.09.22 |
---|---|
[프로그래머스] 09/16 (3) (0) | 2021.09.16 |
[프로그래머스] 09/14 (3) (0) | 2021.09.14 |
[프로그래머스] 09/13 (3) (0) | 2021.09.13 |
[프로그래머스] 09/09 (3) (0) | 2021.09.09 |