이직하고만다(분노)

99클럽 코테 스터디 15일차 TIL + 프로그래머스 완전탐색

xxo_ohii 2024. 8. 5. 16:22
728x90

 

 

 

- 오늘의 학습 키워드 : 완전탐색

- 문제링크 : 프로그래머스 모의고사 수포자 https://school.programmers.co.kr/learn/courses/30/lessons/42840
공부한 내용 본인의 언어로 정리하기 : (밑에 정리)
오늘의 회고

# 완전탐색 알고리즘은 가능한 모든 경우의 수를 탐색하여 해를 찾는 방법입니다.

- 특징 :

 

  • 장점: 모든 가능한 경우의 수를 고려하므로 항상 최적해를 보장합니다.
  • 단점: 경우의 수가 많아지면 시간 복잡도가 급격히 증가하여 비효율적일 수 있습니다.

< 내가 푼 문제 >

 

def solution(answers):
    answer = []
    #완전탐색 문제
    #가장 많은 문제를 맞춘 사람은 누구인지 배열에 담아 리턴해라
    # 1번 2번 3번 수포자가 찍는 방식은 각자 다름 아래는 찍는 방식을 배열에 넣은 것
    people_1 = [1,2,3,4,5]
    people_2 = [2,1,2,3,2,4,2,5]
    people_3 = [3,3,1,1,2,2,4,4,5,5]
    
    #수포자들의 점수
    count = [0,0,0]		#count해서 초기화
    
    for i in range(len(answers)):		  #answer의 범위만큼 요소 i를 비교하며 for문 실행
        if answers[i] == people_1[i%5]:		#정답이랑 people1의 찍은 방식이랑 비교
            count[0] += 1					#점수 카운트에 +1
        if answers[i] == people_2[i%8]:
            count[1] += 1
        if answers[i] == people_3[i%10]:   # answers[i] == people_3[i]:
            count[2] += 1

    for i in range(3):					# count 리스트에서 가장 높은 점수를 가진 수포자를 찾습니다
        if count[i] == max(count):		#최고 점수와 일치하는 수포자를 answer 리스트에 추가합니다
            answer.append(i+1)

    return answer

 

<남이 푼 문제>

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

 

다른 사람들이 푼 문제는
- enumerate를 사용하여 answers 리스트의 각 문제와 해당 인덱스를 얻는다
- 각 문제에 대해 수포자들의 찍기 패턴과 비교하여 맞추면 score 리스트의 해당 인덱스를 증가시킨다
- 패턴의 길이는 len(pattern1), len(pattern2), len(pattern3)로 구해 각각 패턴의 길이를 초과하지 않도록 인덱스를 조정한다.

 

==> 다른 사람들이 푼 문제가 가독성 있고 유지보수에도 편리하다ㅠㅠ

728x90