[프로그래머스] - 모의고사

SeomIII·2021년 7월 5일
0

programmers_LEVEL1

목록 보기
3/34
post-thumbnail

문제 설명

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.

제한 조건
시험은 최대 10,000 문제로 구성되어있습니다.
문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

문제 풀기

생각과정

  • 1번은 1,2,3,4,5 / 2번은 2,1,2,3,2,4,2,5 / 3번은 3,3,1,1,2,2,4,4,5,5 가 반복되는 것임을 깨달음.
    --> 반복해서 비교하되, 다시 처음 인덱스로 돌아가야 함
    --> % 연산자를 사용하자!
    • count1,2,3 중 최댓값을 구하기? --> if 문 사용해서 비교해야하나?
      ==> max 함수를 사용하자! __ 검색의 힘,,

문제 풀이

def solution(answers):
    answer = []
    count1,count2,count3=0,0,0
    
    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]
    
    for i in range(len(answers)):
        if student1[i%len(student1)]==answers[i]:
            count1+=1
            
        if student2[i%len(student2)]==answers[i]:
            count2+=1
            
        if student3[i%len(student3)]==answers[i]:
            count3+=1
            
    largest=max(count1,count2,count3)
    
    if largest==count1:
        answer.append(1)
        
    if largest==count2:
        answer.append(2)
        
    if largest==count3:
        answer.append(3)     
        
    return answer

오류 고치기

  • count1,count2,count3 변수 3개를 한꺼번에 정의하려고 count1,count2,count3=0 이라고 썼다.
    그 결과 , cannot unpack non-iterable int object 오류가 떴다.
    --> count1,count2,count3=0,0,0 이라고 다 초기화를 해주던가,
    count1=count2=count3=0 이라고 해주어야 한다!

개선점 & 아쉬운 점

  • 무작정 숫자를 넣기보다 클린코드를 위해 len() 이용을 잘 해보자. 그러면 제 3자가 보기에 이해가 더욱 쉬운 코드가 되지않을까?
  • 조금만 더 생각해보았다면 max 함수를 떠올릴 수 있었을 것 같다. 검색을 통해 마무리를 지어 아쉽다.

다른 사람 풀이

def solution(answers):
    pattern1 = [1,2,3,4,5]
    pattern2 = [2,1,2,3,2,4,2,5]
    pattern3 = [3,3,1,1,2,2,4,4,5,5]
    score = [0, 0, 0]
    result = []

    for idx, answer in enumerate(answers):
        if answer == pattern1[idx%len(pattern1)]:
            score[0] += 1
        if answer == pattern2[idx%len(pattern2)]:
            score[1] += 1
        if answer == pattern3[idx%len(pattern3)]:
            score[2] += 1

    for idx, s in enumerate(score):
        if s == max(score):
            result.append(idx+1)

    return result

for in enumerate

  • 반복문 사용 시 몇 번째 반복문인지 확인이 필요할 때 이용. 인덱스 번호와 컬렉션의 원소를 tuple 형태로 변환한다.
t=[1,5,6]
for p in enumerate(t):
	print(p)    
>>
(0,1)
(1,5)
(2,6)
  • 소위 말해 반복문의 i와 for문을 돌면서 가져오는 값 둘다 사용해야 할 때 enuerate를 사용하면 좋을 것 같다.
profile
FE Programmer

0개의 댓글