뭔가 기능주의 같은 내 코드
통과한 코드는 아니다. 열심히 고쳐야지. 일단 너무 지저분해
class Stage_num:
def __init__(self,num,fail_ratio):
self.num = num
self.fail_ratio = fail_ratio
def solution(N, stages):
stages = sorted(stages)
answer = []
to_sort = []
stage_index = 0
for current_stage in range(1, N + 1):
for i in range(stage_index,len(stages)):
if(stages[i] > current_stage): # 뒤에 더 큰 것이 안나오면 해결x
to_sort.append(Stage_num(current_stage,len(stages[stage_index: i]) / len(stages[stage_index :])))
stage_index = i
break
if(i == len(stages) - 1) : #배열 끝 까지 더 큰게 안나옴!
to_sort.append(Stage_num(current_stage,len(stages[stage_index: i])/ len(stages[stage_index :])))
stage_index += 1 # 더이상 밑에 for문 못 돌게
if len(to_sort) != N: # N만큼 들어갔니 to_sort에 들어갔니? 뒤에 더 큰 것 나왔을 때 pass해버리니까
while len(to_sort) != N:
to_sort.append(Stage_num(len(to_sort) + 1 , 0))
for i in sorted(to_sort, key = lambda x: x.fail_ratio, reverse= True):
answer.append(i.num)
# 인덱스로 더 큰 거 있는지 보고, 남은 크기만큼 빼서 저장해 둠
return answer
하... 일단 풀기는 풀었다.
최대한 주석을 많이 달아서 풀었다.
까먹을까봐... for문 밖에서 차라리 추가를 하자는 생각이 들어서
지하철에서 풀었다. 다른 사람의 코드를 한 번 봐야지
def solution(N, stages):
stages = sorted(stages)
index = 0 # 스테이지 저장용
answer = [[i,0] for i in range(1,N + 1)] #일단은 스테이지 초기화
for stage in range(1,N + 1): # 스테이지 for문
for num in range(index, len(stages)): # stages가 정렬되어있으니 인덱스 저장해서 그 인덱스부터 돌면됨
if (stage < stages[num]): # 만약 1단계면 현재 1단계에 있는 사람들이 있나 확인 근데 [2,3,4,5] 라면 if문에 걸림 바로 종료
break
if len(stages) - 1 == num and stage >= stages[num]: # for문 빠져 나와서 정리 for문 내에서 해버리면 끝까지 갔을 때 해결 방안이 어려움 ex 5, (1,2,2,3,3,4,4) //
#4 (4,4,4,4) 이러면 stage[num] 중에 자기보다 큰거 안나와서 그냥 pass됨 그렇다고 tru false로 돌린다? 그럼 첫 사례같은 경우 4도 뒤에 되고 5는 아에 나오지도 않았는데 들어가게됨
#
answer[stage-1][1] = (num - index + 1)/len(stages[index:])
index = num + 1
break #이거 안해주면 첫번째 for문이 돌아서 5(4,4,4,4) 이렇게 있다고 한다면 N = 5 일때 if문에 걸려서 /0으로 걸리는 오류 발생.
#애초에 인덱스 끝나버린거면 그 뒤는 안나오는거니까 0이 되는거임
else:
answer[stage-1][1] = (num - index )/len(stages[index:])
index = num
# if(not end):
# answer[stage-1][1] = (num - index + 1)/len(stages[index:]) #end 가 false 일 경우 그래서 한 번 더 for문 돌림
answer = sorted(answer,key= lambda x:x[1], reverse=True) # 스테이지 통과율로 정렬
solve = []
for i in answer:
solve.append(i[0])
return solve
다른 사람의 풀이 이다.
dict을 사용하였다.
def solution(N, stages):
fail_rate = {}
total_user = len(stages)
for stage in range(1, N+1):
if total_user != 0:
fail_user = stages.count(stage)
fail_rate[stage] = fail_user / total_user
total_user -= fail_user
else:
fail_rate[stage] = 0
return sorted(fail_rate, key=lambda x : fail_rate[x], reverse=True)
아.. 멍청이 dic[1] = b 이건 {1 : b} 이렇게 되는걸 까먹은건지 모른건지 그랬다. 그래서 왜 dic을 쓰나 했네...
되게 깔끔하게 잘 풀었다. 특히 count 사용이 좋았어..
[Kotlin] 기능개발 (0) | 2021.04.19 |
---|---|
[Kotlin] 키패드 누르기 (0) | 2021.04.18 |
[Python] [Kotlin]프로그래머스 - 내적 (0) | 2021.04.14 |
[Kotlin] 크레인 인형 뽑기 - 프로그래머스 (0) | 2021.04.14 |
[Kotlin] 프로그래머스 두 개 뽑프로그래머스 두 개 뽑아서 더하기 (0) | 2021.04.09 |
댓글 영역