
(Lv.1) 모의고사
문제 🌐
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에서 문제를 전부 찍으려 합니다. 수포자는 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하는 값을 오름차순 정렬해 주세요.
입력
[1, 2, 3, 4, 5]
[1, 3, 2, 4, 2]
출력
[1]
[1, 2, 3]
접근 방법
문제 설명이 좀 더 친절했다면 좋았을 텐데… 는 내가 문제를 대충 읽은 탓인 듯
1번 수포자가 답을 찍는 방식, 2번 수포자가 답을 찍는 방식, 3번 수포자가 답을 찍는 방식을 모두 배열에 넣어 둔다.
supo1 = [1, 2, 3, 4, 5]
supo2 = [2, 1, 2, 3, 2, 4, 2, 5]
supo3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
result = [0] * 3 [1번 수포자, 2번 수포자, 3번 수포자]
여기서 나는 문제 개수만큼 반복하게 만들 생각을 잠시 했었으나……. 이것은 2023년 내가 한 생각 중 가장 멍청한 생각 중 하나라는 것을 깨닫게 된다. 그럴 필요가 없음 ;;
result에는 일단 3자리 만들어 둔다.
for i in range(len(answers)):
# 1번 수포자 확인
if answers[i] == supo1[i%5]: # supo1의 인덱스를 반복하는 개수만큼 나눠줘서 answers와 맞는지 확인한다!!~
result[0] += 1
# 2번 수포자 확인
if answers[i] == supo2[i%8]:
result[1] += 1
# 3번 수포자 확인
if answers[i] == supo3[i%10]:
result[2] += 1
lucky = max(result)
answers에는 답이 들어 있으므로 하나씩 살펴보며 답이 맞는지, 아닌지 확인한다.
수포자들이 찍은 답과 정답이 일치할 경우 result 배열의 값을 1씩 올려 준다.
그리고 찍신의 가호를 받은 행운의 주인공이 맞힌 문제 개수를 max(result)로 찾는다.
for i in range(3):
if lucky == result[i]:
answer.append(i+1)
return answer
왜 굳이 이런 행동을 하냐면, 정답을 제일 많이 맞힌 사람이 여러 명일 경우에는 그 사람들을 모두 return해야 하기 때문이다. 오름차순으로 정렬할 필요 없이 result를 앞에서부터 확인하고, lucky == resut[i]가 성립하는 경우 answer에 i+1을 삽입하고 리턴한다.
Full Solution
def solution(answers):
answer = []
supo1 = [1, 2, 3, 4, 5]
supo2 = [2, 1, 2, 3, 2, 4, 2, 5]
supo3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
result = [0] * 3
for i in range(len(answers)):
# 1번 수포자 확인
if answers[i] == supo1[i%5]:
result[0] += 1
# 2번 수포자 확인
if answers[i] == supo2[i%8]:
result[1] += 1
# 3번 수포자 확인
if answers[i] == supo3[i%10]:
result[2] += 1
lucky = max(result)
for i in range(3):
if lucky == result[i]:
answer.append(i+1)
return answer
'알고리즘 문제 > 프로그래머스' 카테고리의 다른 글
(프로그래머스 Lv.2) 구명보트 (python) (0) | 2023.06.27 |
---|---|
(프로그래머스 Lv.2) 전력망을 둘로 나누기 (python) (0) | 2023.05.22 |
(프로그래머스 Lv.2) H-index (python) (0) | 2023.05.17 |
(프로그래머스 Lv.2) 더 맵게 (python) (0) | 2023.05.17 |
(프로그래머스 Lv.1) 같은 숫자는 싫어 (python) (0) | 2023.05.15 |