🔒 문제
문제 설명
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.
1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한 조건- 시험은 최대 10,000 문제로 구성되어있습니다.
- 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
- 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.
answers | return |
[1,2,3,4,5] | [1] |
[1,3,2,4,2] | [1,2,3] |
입출력 예 #1
- 수포자 1은 모든 문제를 맞혔습니다.
- 수포자 2는 모든 문제를 틀렸습니다.
- 수포자 3은 모든 문제를 틀렸습니다.
따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.
입출력 예 #2
- 모든 사람이 2문제씩을 맞췄습니다.
🔓 풀이
🔑 요구사항 파악
1. 요구사항 : 주어지는 answers을 3가지 방법으로 탐색, 가장 많이 일치한 번호를 리턴. 중복 시 오름차순 정렬
2. Type
- Input | answers: List[int]
- Output | answer: List[int] 오름차순
🔑 문제 정의
1. 3가지 탐색 방법 정의
2. 수포자 방법 반복하기
3. 채점 결과 max 구하기
🔑 문제 해결 방법 고민하기
1. 3가지 탐색 방법 정의
- 1: 1~5 반복
- 2: 2와 2를 제외한 1~4를 번갈아가며 반복
- 3: 3,1,2,4,5 순으로 각각 2번씩 반복
2. 수포자 방법 반복하기
- answers의 인덱스를 각 수포자 방법의 길이로 나누어 인덱싱
3. 채점 결과 max 구하기
- if 조건문을 통해 가장 많이 맞춘 개수를 구하고 각 개수와 일치하는 방법을 answer에 추가
<고민의 흔적>
🔑 문제 해결 / 코드
def solution(answers):
answer = []
method1 = [1,2,3,4,5]
method2 = [2, 1, 2, 3, 2, 4, 2, 5]
method3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
result1 = 0
result2 = 0
result3 = 0
for index, value in enumerate(answers):
if value == method1[index % len(method1)]:
result1 += 1
if value == method2[index % len(method2)]:
result2 += 1
if value == method3[index % len(method3)]:
result3 += 1
max_result = result1
if result2 > max_result:
max_result = result2
if result3 > max_result:
max_result = result3
if result1 == max_result:
answer.append(1)
if result2 == max_result:
answer.append(2)
if result3 == max_result:
answer.append(3)
return answer
answers = [1,3,2,4,2]
print(solution(answers))
💉 피드백
1. 수포자 찍기 방법 반복하기
처음엔 조금 헤맸지만 그래도 인덱스를 각 리스트의 길이로 나누는 방법은 알맞게 접근
2. score 카운팅
스코어를 리스트로 만들었으면 불필요한 변수도 없앨 수 있고 max 스코어를 정답으로 뽑는 과정도 쉽게 접근이 가능했다.
풀이 중간에 복잡하게 고민하다 보니 진도가 안 나가서 한줄 두줄 코드를 적어봤는데,,, 완성은 했지만 if문이 너무 남발된 코드가 튀어나왔다. 😂
📌 도전 과제
레벨 1문제인데 시간이 40분 정도 걸렸다. 스스로 정답을 도출하긴 했는데 초반 삽질을 많이 해서,,
문제 푸는 시간을 단축해보자!!
'알고리즘' 카테고리의 다른 글
[프로그래머스] 실패율_python (0) | 2022.05.02 |
---|---|
[프로그래머스] 약수의 개수와 덧셈_Python (0) | 2022.05.02 |
[프로그래머스] K번째수_Python (0) | 2022.05.01 |
[프로그래머스] 완주하지 못한 선수_Python (0) | 2022.04.29 |
[프로그래머스] 소수 만들기 (0) | 2022.04.28 |