[프로그래머스] 완전탐색 - 모의고사

eunseo kim 👩‍💻·2021년 3월 1일
0

👊 문제 풀기

목록 보기
13/17

🎯 programmers : 완전탐색 - 모의고사


🤔 나의 풀이 1

📌 문제

- 프로그래머스 코딩테스트 연습 > 완전탐색 > Level 1 모의고사

📌 날짜

2020.03.01

📌 시도 횟수

2 try

💡 itertools의 permutations 사용

def solution(answers):
    s1, s2, s3 = 0, 0, 0  # 1, 2, 3의 score
    p1 = [1, 2, 3, 4, 5]
    p2 = [2, 1, 2, 3, 2, 4, 2, 5]
    p3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    l1, l2, l3 = len(p1), len(p2), len(p3)

    for i in range(len(answers)):
        if p1[i % l1] == answers[i]:
            s1 += 1
        if p2[i % l2] == answers[i]:
            s2 += 1
        if p3[i % l3] == answers[i]:
            s3 += 1

    answer = []
    max_score = max(s1, s2, s3)
    if s1 == max_score:
        answer.append(1)
    if s2 == max_score:
        answer.append(2)
    if s3 == max_score:
        answer.append(3)

    return answer

💡 문제 해결 방법

- 모든 answers에 대하여 각각 p1, p2, p3 이 세 사람의 찍는 방식을 완전탐색으로 하나씩 비교했다.
- 단, 세 사람의 인덱스를 한꺼번에 처리하기 위해
-----------------------------------------
    for i in range(len(answers)):
        if p1[i % l1] == answers[i]:
            s1 += 1
        if p2[i % l2] == answers[i]:
            s2 += 1
        if p3[i % l3] == answers[i]:
            s3 += 1
-----------------------------------------
와 같이 나머지 연산으로 i는 동일하더라도 각 사람마다 실제 처리되는 인덱스가 달라지게 설정했다.

💡 새롭게 알게 된 점

-

❌ (한번에 맞추지 못한 경우) 오답의 원인

- 문제 이해를 잘못했다. 
- 실제 정답도 사람이 찍는 것 처럼 특정 숫자가 계속 반복된다는 줄...ㅎ

😋 조금 더 최적화 시킨 코드

  • 위에 코드랑 거의 비슷한데 s(점수)를 list로 처리해서 코드 아래쪽의 answer을 구하는 부분이 좀 더 깔끔해졌다😘
def solution(answers):
    s = [0, 0, 0]  # 1, 2, 3의 score
    p1 = [1, 2, 3, 4, 5]
    p2 = [2, 1, 2, 3, 2, 4, 2, 5]
    p3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    l1, l2, l3 = len(p1), len(p2), len(p3)  # 1, 2, 3의 length

    for i in range(len(answers)):
        if p1[i % l1] == answers[i]:
            s[0] += 1
        if p2[i % l2] == answers[i]:
            s[1] += 1
        if p3[i % l3] == answers[i]:
            s[2] += 1

    answer = []
    max_score = max(s)
    for idx, score in enumerate(s):
        if score == max_score:
            answer.append(idx + 1)

    return answer
profile
열심히💨 (알고리즘 블로그)

0개의 댓글