문제
https://school.programmers.co.kr/learn/courses/30/lessons/42889
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr

문제이해
말 그대로 각 스테이지의 실패율을 구해서 실패율이 큰 스테이지 번호 순서대로 추출하는 문제였다.
문제 이해는 예시를 보니 이해가 딱 가서 음 금방 풀 수 있겠군 하면서 자신있게 풀기 시작했다.
문제풀이(내가 푼 코드)
먼저 나는 분자와 분모를 각각 구한 후 실패율을 구하려고 했다.
분자는 각 stages의 개수를 세는 것으로 구하였고,
분모는 먼저 stages의 길이를 구한 후 1번째 인덱스부터는 temp 리스트를 이용해서 값을 갱신해주었다.
알고보니 나는 분모를 엄청 복잡하게 구했다!!
분자와 분모를 이용해 실패율을 ratio 리스트에 저장하였고,
enumerate와 sorted(), lambda를 이용해 실패율이 큰 스테이지 번호 순서대로 추출했다.
enumerate를 이용해서 idx와 val값을 동시에 나타낼 수 있었고, sorted()함수와 reverse를 이용해 내림차순으로 정렬할 수 있었다. 여기서 lambda x: x[1]은 val값을 기준으로 정렬한다는 뜻이다. 그리고 idx+1을 사용해 1부터 시작하는 스테이지 번호를 반환하였습니다.
그리고 예시 정답을 맞춘 후 정답을 제출하니 몇몇 예시에서 런타임에러가 발생하였다.
그 이유는 분모가 0일 때, 에러가 발생했기 때문이다.
보통 백준을 이용해서 풀 때 ZeroDivisionError라고 뜨는데 프로그래머스는 뜨지 않아 오류 찾기가 좀 더 힘든 것 같다..
에러까지 해결하고 정답을 맞췄다. 하지만 내가 너무 복잡하게 푼 느낌이라 다른사람의 풀이도 보고 chatGPT의 풀이도 참고해 다시 한 번 문제를 살펴보았다.
문제풀이(chatGPT)
chatGPT의 풀이에는 분모를 구하는 방법이 엄청 간결하다. 분자를 구할 때 1부터 N+2까지 리스트를 저장해두니 나처럼 temp를 이용 안해도 밑의 IndexError가 나지 않아 간결한 코드가 완성되었다.
IndexError: list index out of range
그리고 나와 다르게 reverse를 사용하지 않고 마이너스 기호를 이용해 내림차순으로 작성했다.
내가 푼 코드의 길이와 현저한 차이가 나지만.. 나도 풀었다는 것에 만족!
'알고리즘문제풀이' 카테고리의 다른 글
| [백준/Python] 1260번 DFS와 BFS (0) | 2025.02.17 |
|---|---|
| [백준/Python] 2579번 계단 오르기 (0) | 2025.02.14 |
| [백준/Python] 1002번 터렛 (0) | 2025.02.12 |
| [백준/Python] 2805번 나무 자르기 (0) | 2025.02.11 |
| [백준/Python] 18110번 solved.ac (0) | 2025.02.10 |
