첫번째 코드
문제를 보고 든 생각은 어...학생 답을 어떻게 만들지? 였다.
하지만 몫과 나머지 방법을 이용하면 만들어볼 수 있겠구나! 라는 생각을 했다.
답에 패턴이 있으므로 정답이 답의 패턴보다 길면 해당 길이의 몫만큼 곱하고 나머지 값을 인덱싱해서 추가하는 방법으로 학생들의 답을 만든다!
[패턴] * (정답의 길이 // 패턴의 길이) + 패턴[:(정답의 길이 % 패턴의 길이)] << 이런 식으로!
이후에 정답과 비교해서 맞으면 성적에 더하고
학생들 중 가장 많이 맞은 학생의 점수를 구한 후
학생들을 반복해가면서 가장 높은 점수의 경우 추가하는 방법으로 진행했다.
(나는 작은 숫자부터 append 해서 문제가 되지 않지만 그렇지 않은 경우 오름차순 정렬을 위해 sort를 진행해야 한다.)
def solution(answers):
answer = []
student1 = [1, 2, 3, 4, 5]
student2 = [2, 1, 2, 3, 2, 4, 2, 5]
student3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
answer_multiple1 = len(answers) // len(student1)
answer_multiple2 = len(answers) // len(student2)
answer_multiple3 = len(answers) // len(student3)
answer_index1 = len(answers) % len(student1)
answer_index2 = len(answers) % len(student2)
answer_index3 = len(answers) % len(student3)
student1_answer = student1 * answer_multiple1 + student1[:answer_index1]
student2_answer = student2 * answer_multiple2 + student2[:answer_index2]
student3_answer = student3 * answer_multiple3 + student3[:answer_index3]
student1_score = 0
student2_score = 0
student3_score = 0
index = 0
for i in answers:
if i == student1_answer[index]:
student1_score += 1
if i == student2_answer[index]:
student2_score += 1
if i == student3_answer[index]:
student3_score += 1
index += 1
Max = max(student1_score, student2_score, student3_score)
if student1_score == Max:
answer.append(1)
if student2_score == Max:
answer.append(2)
if student3_score == Max:
answer.append(3)
return answer
통과!
더 간단한 방법이 있을 것 같긴 하다.. 킁;
링크
programmers/프로그래머스/1/42840. 모의고사 at main · ornni/programmers
repository for recording Programmers Algorithm problem solving - ornni/programmers
github.com