Python - 알고리즘 실습 : 프로그래머스 <실패율>
오늘은 쉬운 문제로 몸을 풀었다. only 구현. 2019 KAKAO BLIND RECRUITMENT에 나왔던 문제인가보다.
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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와 실패율을 모두 저장해서 정렬을 하면 더 깔끔해질 수 있었다.
3) SQL 추가
알고리즘을 풀고 시간이 남아 간단한 SQL 문제도 풀어보았다. SQLD 따러 가야징~
-- 코드를 입력하세요
SELECT FLAVOR
FROM FIRST_HALF
ORDER BY
TOTAL_ORDER DESC,
SHIPMENT_ID
FIRST_HALF 테이블에서 TOTAL_ORDER로 우선 내림차순, 이후 SHIPMENT_ID로 오름차순하는데 FLAVOR만 조회해라
1일 1알고리즘 완료!!