출처 : programmers.co.kr/learn/courses/30/lessons/42840
코딩테스트 연습 - 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는
programmers.co.kr
풀이 방법
완전 탐색문제로 1번, 2번, 3번 학생들은 자신의 규칙에 따라 반복해서 찍는다.
ex) 1번은 1, 2, 3, 4, 5 반복
그러므로 답(answers)을 하나씩 돌아가며 answers의 인덱스에 각 학생의 반복하는 답의 개수를 나눈 나머지를 각각의 학생들의 답 배열에 넣어주어 나온 값과 answers를 비교하여 일치하면 score을 +1 씩 해주어서 점수를 채점한다
나중에 학생들의 점수를 sort할때 학생의 번호가 필요하므로 학생들의 점수는 score = [학생 번호, 점수] 형태로 선언을 해준다
// 학생들의 [학생 번호, 점수]
score =[[1, 0], [2, 0], [3, 0]]
// 학생 1, 2, 3 의 답 반복 패턴
sol1 = [1, 2, 3, 4 ,5]
sol2 = [2, 1, 2, 3, 2, 4, 2, 5]
sol3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
def solution(answers):
answer = []
for i in range(len(answers)):
// 각 학생의 인덱스
index1 = i % 5
index2 = i % 8
index3 = i % 10
if sol1[index1] == answers[i]:
score[0][1] += 1
if sol2[index2] == answers[i]:
score[1][1] += 1
if sol3[index3] == answers[i]:
score[2][1] += 1
// 학생 점수를 내림차순으로 lambda함수를 사용하여 정렬
score.sort(key = lambda x : x[1], reverse =True)
// 점수 동점자가 발생했을 때 처리
if score[0][1] == score[1][1]:
answer.append(score[0][0])
answer.append(score[1][0])
if score[0][1] == score[2][1]:
answer.append(score[2][0])
else:
answer.append(score[0][0])
return answer
더 좋은 풀이
다른 분들의 코드를 보니 점수를 sort대신 enumerate함수를 사용하여 최고점의 학생을 선택하는 것을 볼 수 있다.
enumerate 함수는 각 배열에서 인덱스와 배열값을 가져오는 함수이다
예시코드)
for idx, s in enumerate(score):
if s == max(score):
result.append(idx+1)
'Algorithm' 카테고리의 다른 글
[프로그래머스] 키패드 누르기 (Python) (0) | 2021.02.15 |
---|---|
[프로그래머스] 3진법 뒤집기 (Python) (0) | 2021.02.14 |
[algospot] 너드인가, 너드가 아닌가? (c++) (0) | 2021.02.14 |
[프로그래머스] 체육복 (c++) (0) | 2021.02.10 |
[프로그래머스] 완주하지 못한 선수 (c++) (0) | 2021.02.07 |