005. 모의고사

16501 단어 algorithmalgorithm

문제

내 풀이(정답)

  • 사실 온전히 내 풀이라고 볼 수 없다 나는 순환주기를 나눠준다는 사고를 하지 못했다ㅜㅜ
def solution(answers):
    answer = []
    
    fs = [1,2,3,4,5]
    ss = [2,1,2,3,2,4,2,5]
    ts = [3,3,1,1,2,2,4,4,5,5]
    
    fs_score = 0
    ss_score = 0
    ts_score = 0
    
    for number in range(len(answers)):
        if answers[number] == fs[number%5]:
            fs_score += 1
        if answers[number] == ss[number%8]:
            ss_score += 1
        if answers[number] == ts[number%10]:
            ts_score += 1
    
    std_scores = [fs_score, ss_score, ts_score]
    
    for i, score in enumerate(std_scores):
        if score == max(std_scores):
            answer.append(i+1)

    return answer

enumerate 참고 : wikidocs

  • 반복문 사용 시 몇 번째 반복문인지 확인이 필요할 수 있습니다. 이때 사용합니다.
  • 인덱스 번호와 컬렉션의 원소를 tuple형태로 반환합니다.
>>> t = [1, 5, 7, 33, 39, 52]
>>> for p in enumerate(t):
...     print(p)
... 
(0, 1)
(1, 5)
(2, 7)
(3, 33)
(4, 39)
(5, 52)
  • tuple형태 반환을 이용하여 아래처럼 활용할 수 있습니다.
>>> for i, v in enumerate(t):
...     print("index : {}, value: {}".format(i,v))
... 
index : 0, value: 1
index : 1, value: 5
index : 2, value: 7
index : 3, value: 33
index : 4, value: 39
index : 5, value: 52

가장 높은 비율의 정답 풀이

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
  • 애초에 score 리스트에 넣어놔서 코드를 간결하게 만드는 모습

좋은 웹페이지 즐겨찾기