명똥 알고리즘/알고리즘 실습

Python - 알고리즘 실습 : 프로그래머스 <실패율>

민빵명똥 2023. 10. 25. 20:49
반응형

오늘은 쉬운 문제로 몸을 풀었다. only 구현. 2019 KAKAO BLIND RECRUITMENT에 나왔던 문제인가보다.

programmers 실패율 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

실패율 문제 내용
입출력

1. 프로그래머스 실패율

1) 문제 요약

(1) N개의 stage가 있는데, 게임을 하는 사람이 현재 머무르는 스테이지 번호가 담긴 배열인 stages가 있다. 예를 들어, 2 이면 2 stage를 깨지 못하고 머물러 있는 것이다.

(2) 이 stages를 이용해 실패율을 구하는데 실패율은 해당 스테이지에 머무르는 사람 / 스테이지 도달한 사람 수 이다. 1번 예에서, 1 stage는 실패율이 1/8이고, 2 stage는 3/7, 3 stage는 2/4.. 이런 식이다.

(3) 실패율이 높은 순서대로 정렬하는데, 해당 실패율의 스테이지 번호로 정렬한다.

→ 구현

 

2) 문제 해결

(1) 먼저 stage마다 실패율을 모두 구해준다.

각 스테이지의 실패율을 result에 담았다. 주의할 점은 끝 stage 도달한 사람이 없을 때 즉, L이 0이 될 때를 주의해 주어야 한다. 골라주지 못하면 RuntimeError 발생

(2) 내림차순 정렬을 한 실패율과 방문 처리를 이용해서 큰 것부터 보면서 answer 리스트에 추가해 주었다.

리뷰를 해보니, answer.sort(key= lambda x: (-x[1], x[0])) 이런 식으로, result에 stage와 실패율을 모두 저장해서 정렬을 하면 더 깔끔해질 수 있었다.

   
    import copy

    def solution(N, stages):

        L = len(stages) # 사람 수
        result = []
        for i in range(1, N + 1):
            cnt = stages.count(i)
            if L > 0: # 실패율 추가
                result.append(cnt / L)
                L -= cnt
            elif L == 0: # 끝 스테이지에 도달하기 전에 L이 0이 되는 경우
                result.append(L) # 0 추가

        answer = []
        result_co = copy.deepcopy(result)
        result_co.sort(reverse=True) # 내림차순 정렬

        visited = [0] * len(result)

        for j in range(len(result_co)): # 제일 큰 것부터 하나씩 보면서
            for k in range(len(result)): # 찾아나간다.
                if visited[k] == 0 and result_co[j] == result[k]: # 방문 안했고 같으면
                    visited[k] = 1 # 방문처리하고
                    answer.append(k+1) # idx + 1 추가
                    break

        return answer
 

 

3) SQL 추가

알고리즘을 풀고 시간이 남아 간단한 SQL 문제도 풀어보았다. SQLD 따러 가야징~

추가 SQL 문제

-- 코드를 입력하세요
SELECT FLAVOR
FROM FIRST_HALF
ORDER BY 
    TOTAL_ORDER DESC, 
    SHIPMENT_ID

 

FIRST_HALF 테이블에서 TOTAL_ORDER로 우선 내림차순, 이후 SHIPMENT_ID로 오름차순하는데 FLAVOR만 조회해라

 

1일 1알고리즘 완료!!

반응형