Algorithm & Data Structure/문제 풀이

[programmers] 모의고사 (Python)

뭉지(moonz) 2021. 6. 21. 23:01
반응형

링크 : https://programmers.co.kr/learn/courses/30/lessons/42840

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

 

문제 (level 1입니다)

분류

  • 완전 탐색

생각 정리

  • 반복되는 숫자들에 관심을 가지면 안되고, 반복되는 갯수에 관심을 가져야 한다.
  • 수포자1은 5개, 수포자2는 8개, 수포자 3은 10개를 반복하므로 문제의 정답과 비교할 때 나머지를 이용한다는 생각을 한다.
  • 문제의 정답과 같을 때 맞춘 점수를 ++해주고 두번 째 문제는 return 형식이다.
  • 맞춘 점수들 중에서 유일한 최대갯수가 있다면 한 개만 return하지만 동일한 갯수로 맞추었다면 오름차순형태로 모두 보여주는데 숫자로 return해야한다.
  • 여기서 오름차순으로 보여줘야한다는 것은 return할 때 [1,2,3..] 이런식이어야한다는 의미이다.
  • 세 개중 가장 최고점인 것과 비교하면서 같은 것이 있으면 answer에 추가한다.

전체 코드

def solution(answers):
    answer = []
    a_cnt, b_cnt, c_cnt = 0, 0, 0
    a = [1, 2, 3, 4, 5]               # 5개
    b = [2, 1, 2, 3, 2, 4, 2, 5]      # 8개
    c = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]# 10개
    for i in range(len(answers)):
        if a[i%5] == answers[i]:      # 5개씩 반복(0,1,2,3,4,0,1,2,3,4..)
            a_cnt += 1
        if b[i%8] == answers[i]:
            b_cnt += 1
        if c[i%10] == answers[i]:
            c_cnt += 1
    rank = [a_cnt, b_cnt, c_cnt]
    temp = max(rank)                  # 같은 갯수의 문제를 맞췄으면 함께 출력
    for i in range(len(rank)):
        if rank[i] == temp:
            answer.append(i+1)
    return answer

 

다른 사람의 풀이

  • 하나의 리스트로 연산을 하고, enumerate를 이용하여 접근한 점이 Good
def solution(answers):
    answer = []
    cnt = [0,0,0]
    a = [1, 2, 3, 4, 5]               # 5개
    b = [2, 1, 2, 3, 2, 4, 2, 5]      # 8개
    c = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]# 10개
    for i in range(len(answers)):
        if a[i%5] == answers[i]:      # 5개씩 반복(0,1,2,3,4,0,1,2,3,4..)
            cnt[0] += 1
        if b[i%8] == answers[i]:
            cnt[1] += 1
        if c[i%10] == answers[i]:
            cnt[2] += 1
    for idx, count in enumerate(cnt):
        if count == max(cnt):
        	answer.apend(idx+1)
    return result

 

반응형