반응형
문제
https://programmers.co.kr/learn/courses/30/lessons/42840
코딩테스트 연습 - 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는
programmers.co.kr
완전 탐색(Brute Force): 가능한 모든 경우의 수를 다 시도해 보는 것
코드
def solution(answers):
answer = []
s1 = [1, 2, 3, 4, 5]
s2 = [2, 1, 2, 3, 2, 4, 2, 5]
s3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
scores = [0,0,0]
max_score = 0
for i in range(len(answers)):
if(s1[i%5] == answers[i]): scores[0] = scores[0] + 1
if(s2[i%8] == answers[i]): scores[1] = scores[1] + 1
if(s3[i%10] == answers[i]): scores[2] = scores[2] + 1
max_score = max(scores)
for i in range(len(scores)):
if (scores[i] == max_score):
answer.append(i+1)
return answer
코드 설명
s1: 첫번째 학생의 정답 리스트
s2: 두번째 학생의 정답 리스트
s3: 세번째 학생의 정답 리스트
scores: 세 학생의 정답 갯수
max_scores: scores 리스트 중 가장 큰 값
answers: 입력으로 받은 정답 리스트
answer: 최종 정답 리스트, return할 값
- 입력으로 받은 answers 리스트의 값과 s1, s2, s3의 값을 하나씩 비교해 보며 두 값이 일치하면 scores 리스트의 값을 1씩 증가시킨다. answers 리스트의 값이 s1, s2, s3보다 클 수 있으므로(시험은 최대 10,000 문제라고 명시되어 있다) 모듈러 연산을 통해 값이 반복되게 해 준다.
- 위 작업이 모두 끝나면 scores 리스트 값 중 가장 큰 값을 추출해 내고 이를 max_score 변수에 저장한다.
- scores 리스트를 반복문으로 돌며 max_score 값과 동일한 값이 있을 시 새로운 배열 answer에 인덱스 값을 추가한다. 이때 i는 0부터 시작하고 학생은 1부터 시작하므로 i에 1을 더해 학생 번호와 값을 맞추어 준다.
- answer 리스트를 리턴한다.
마무리
푸는 데 시간이 정말 오래 걸렸다.
아직도 모듈러 연산이 헷갈린다. 기본에 충실하여 더 연습해야겠다.
+ 추가
for i in range(len(answers)):
if(s1[i%len(s1)] == answers[i]): scores[0] += 1
if(s2[i%len(s2)] == answers[i]): scores[1] += 1
if(s3[i%len(s3)] == answers[i]): scores[2] += 1
이렇게도 코드 작성이 가능하다.반응형
'Problem Solving > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 위클리 챌린지 "부족한 금액 계산하기"(파이썬) (0) | 2022.05.05 |
---|---|
[프로그래머스] 연습문제 "x만큼 간격이 있는 n개의 숫자"(파이썬) (0) | 2022.05.04 |
[프로그래머스] 연습문제 "핸드폰 번호 가리기"(파이썬) (0) | 2022.05.02 |
[프로그래머스] 연습문제 "시저암호" (파이썬) (0) | 2022.05.02 |
[프로그래머스] 월간 코드 챌린지 시즌2 "음양 더하기" (파이썬) (0) | 2022.04.25 |
[프로그래머스] 월간 코드 챌린지 시즌3 "없는 숫자 더하기" (파이썬) (0) | 2022.04.25 |