[5/24] 모의고사

문제

내 코드

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)

좋은 웹페이지 즐겨찾기