어제 새벽에 프로그래머스 업데이트가 되더니 메인 홈페이지가 바뀌었다...!
코딩테스트를 준비하며 문제를 푸는 곳은 도메인마저 변경되었다 ❗
리프레시 느낌으로다가 스킬체크 라는 것을 풀어봤다. 내가 풀어본 레벨 1은 제한 시간 40분 내에 2문제를 풀면 되는 거였다. 다행히 쉬운 문제가 나와서 40분 내에 풀 수 있었다.
모의고사는 그 중 첫번째 문제다.
사실 문제 하나당 20분을 잡고 풀다보니 정확도에 초점을 맞추느라 코드를 효율적으로 구현하지는 못했다. 더군다나 아직 파이썬 익숙치 않아 자꾸 C++ 문법이 떠올라 조금 애먹었던 것 같다.
프로그래머스 [모의고사] 문제 풀이
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]
check1=0
check2=0
check3=0
max=0
for i in range(len(answers)):
if answers[i]==student1[i%5]:
check1+=1
if(max<check1):
max=check1
if answers[i]==student2[i%8]:
check2+=1
if(max<check2):
max=check2
if answers[i]==student3[i%10]:
check3+=1
if(max<check3):
max=check3
if max==check1:
answer.append(1)
if max==check2:
answer.append(2)
if max==check3:
answer.append(3)
return answer
굉장히 비효율적인 코드라 생각했는데 엄청나게 다른 방법이 있는 문제는 아니었다. 다른 사람들의 풀이를 보면서 check1, check2, check3을 배열로 바꿔주면 코드가 훨씬 편하겠다는 깨달음을 얻었다.
배워볼만한 점은 enumerate 를 사용해 max 값에 따라 answer을 출력해주는 방식이다. 또한, max 값을 출력해주는 함수를 따로 사용하면 된다.
코드를 다음과 같이 바꿔보았다.
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]
check = [0, 0, 0]
for i in range(len(answers)):
if answers[i]==student1[i%5]:
check[0]+=1
if answers[i]==student2[i%8]:
check[1]+=1
if answers[i]==student3[i%10]:
check[2]+=1
for i, maximum in enumerate(check):
if maximum == max(check):
answer.append(i+1)
return answer
📢 enumerate 란?
보통 for문과 함께 쓰인다.
list가 있는 경우 순서와 list 값을 전달하는 기능을 가진 함수다.
그 말은 즉슨, 순서(key 혹은 index)를 나타낼 값과 실제 데이터 값(data 혹은 value)을 나타낼 값 이렇게 두 개의 인자(내 코드의 경우 i 와 maximum)가 필요하다는거겠지?
이 문제는 딱 20분만에 풀었다. (다음 문제는 4분만에 풀었지만 ㅎㅎ)
두 문제를 다 풀고 나면 스킬 레벨 배지를 준다.
정말 별건 아니지만 그래도 100점을 보니까 기분이 좋아서 ㅎㅎ 자주 도전해봐야지...!
이만 다음 포스팅 쓰러 가야지 ... 총총 ~~..
안녕 !