문제 설명
문제 설명 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.
풀이
def solution(answers):
peo = []
cnt1,cnt2,cnt3 =0,0,0
peo1 = [1,2,3,4,5]
peo2 = [2,1,2,3,2,4]
peo3=[3,3,1,1,2,2,4,4]
for i in range(len(answers)):
if peo1[i] == answers[i]:
cnt1 +=1
if peo2[i] == answers[i]:
cnt2 +=1
if peo3[i] == answers[i]:
cnt3 +=1
k = max(cnt1,cnt2,cnt3)
if cnt1 == k:
peo.append(1)
if cnt2 == k:
peo.append(2)
if cnt3 == k:
peo.append(3)
return peo
이렇게 코드를 짰는데 런타임 에러가 났다. 반복문이나 조건문을 줄여야할 것 같았다. 그런데 리스트를 검색하는 과정에서 문제가 있었는 듯 하다
def solution(answers):
peo = []
cnt1,cnt2,cnt3 =0,0,0
peo1 = [1,2,3,4,5]
peo2 = [2,1,2,3,2,4,2,5]
peo3=[3,3,1,1,2,2,4,4,5,5]
for i in range(len(answers)):
s1 = i%5 # 반복 구간
s2 = i%8
s3 = i%10
if peo1[s1] == answers[i]: #참조 방법 변경
cnt1 +=1
if peo2[s2] == answers[i]:
cnt2 +=1
if peo3[s3] == answers[i]:
cnt3 +=1
k = max(cnt1,cnt2,cnt3)
if cnt1 == k:
peo.append(1)
if cnt2 == k:
peo.append(2)
if cnt3 == k:
peo.append(3)
return peo
수정했더니 런타임 에러가 해결됐다.
========================================================================================
time 모듈을 써서 실행 속도를 측정해보니 테스트 데이터를 기준으로 위에 코드는 4.5, 5.0(10^-6)초 아래 코드는 7.0, 7.1초가 걸렸다.
![]() |
![]() |
런타임 에러는 시간 문제가 아니라 컴파일 에러를 벗어나 논리적 오류가 생겼을 때 발생하는 것인가보다. 아무래도
첫 번째 코드는 [1,2,3,4,5]를 어느정도 반복하면 그 뒤에 입력값의 요소가 10개가 주어졌을 때 해결할 수 없게 된다.
문제를 읽고 반복되는 논리가 있을 때는 그것을 꼭 고려해주도록 하자
출처
https://school.programmers.co.kr/learn/courses/30/lessons/42840
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
728x90
'Programing > 프로그래머스 오답노트' 카테고리의 다른 글
최고의 집합 (level 3이라고 겁 먹지 말 것) (0) | 2023.09.16 |
---|---|
다리를 건너는 트럭 (deque 모듈) (0) | 2023.09.15 |
푸드 파이트 대회 - 대칭 숫자 출력 (0) | 2023.09.13 |
가장 가까운 글자 - 런타임 에러 (0) | 2023.09.13 |
배열 정리. sort()와 lambda 이용한 방법 (0) | 2023.09.12 |
댓글