[5/24] 모의고사

이경준·2021년 5월 24일
0

코테

목록 보기
9/140
post-custom-banner

문제

내 코드

def solution(answers):
    one = [1, 2, 3, 4, 5] * 2000
    two = [2, 1, 2, 3, 2, 4, 2, 5] * 1250
    three = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] * 1000
    
    result = [0, 0, 0, 0]
    for i in range(len(answers)):
        if (one[i] == answers[i]):
            result[1] += 1
        if (two[i] == answers[i]):
            result[2] += 1
        if (three[i] == answers[i]):
            result[3] += 1

    m = max(result)
    arr = []
    for i in range(4):
        if (result[i] == m):
            arr.append(i)

    return arr

풀이

  1. 각 배열을 10000개만큼 늘려준다.
  2. for문을 사용해서 각 배열과 answers를 비교하고, 일치하는 값을 가진 사람에게 1씩 증가시켜준다.
  3. max 값을 구한다. (바로 max 인덱스를 추출하지 않은 것은, max 함수는 하나만 반환하기 때문에 동점자를 모두 추출할 수 없다)
  4. max 값을 가진 index를 정답 배열에 추가한다.

효율적인 코드

def solution(answers):
    one = [1, 2, 3, 4, 5]
    two = [2, 1, 2, 3, 2, 4, 2, 5]
    three = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    result = [0, 0, 0]
    arr = []
    
    for idx, answer in enumerate(answers):
        if (answer == one[idx%len(one)]):
            result[0] += 1
        if (answer == two[idx%len(two)]):
            result[1] += 1
        if (answer == three[idx%len(three)]):
            result[2] += 1

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

    return arr

피드백

  • 마지막에 정답 리스트에 추가하는 부분은 비슷한데, max(result)를 변수에 저장할 필요 없이 for문에서 바로 비교하면 된다.
  • 각 수포자의 리스트를 10000까지 만들 필요 없이, 비교하는 for문에서 인덱스를 나머지로 쓰면 된다.
  • enumerate() 함수를 사용하면 조금 더 for문을 간결하게 사용할 수 있다.
  • 배열을 내가 직접 만들어야 할 줄 알고 몇시간동안 끙끙거리며 만들었는데, 그냥 있는거 쓰면 됐었다...

삽집한 코드

#1번 수포자
one = []
for i in range(1, n+1):
    if (i % 5 == 1): 
        one.append(1)
    elif (i % 5 == 2):
        one.append(2)
    elif (i % 5 == 3):
        one.append(3)
    elif (i % 5 == 4):
        one.append(4)
    elif (i % 5 == 0):
        one.append(5)

#2번 수포자
two = []
for i in range(1, n+1):
    if (i % 2 != 0):
        two.append(2)
    else:
        two.append(one[int(i/2)-1])
        
#3번 수포자
three = []
for i in range(1, n+1):
    if (i % 5 == 1):
        three.append(3)
        three.append(3)
    elif (i % 5 == 2):
        three.append(1)
        three.append(1)
    elif (i % 5 == 3):
        three.append(2)
        three.append(2)
    elif (i % 5 == 4):
        three.append(4)
        three.append(4)
    elif (i % 5 == 0):
        three.append(5)
        three.append(5)
        
three = three[:n]

배운 것

  • enumerate(리스트) : 인덱스와 원소로 이루어진 튜플을 만들어 준다. 각각 찢어서 쓰기 위해서는 다음과 같이 for문 안에 인덱스와 원소를 적어줘야 한다.
    ex) for idx, answer in enumerate(answers)
profile
The Show Must Go On
post-custom-banner

0개의 댓글