프로그래머스 - 모의고사

김대일·2021년 5월 23일
post-thumbnail

이번 문제는 1,2,3번 수포자가 일정한 규칙으로 답을 찍는데 가장 많이 맞힌 사람을 return 하는 문제이다.

여전히 어떤식으로 접근하면 될지 머릿속으로는 떠오르지만 코드로 옮기는 능력이 아직도 부족함을 느낀다.

이 문제에서는 완전 탐색을 이용해 문제를 풀어야했다.

완전 탐색 알고리즘이란?

  • 가능한 모든 경우의 수를 다 체크해서 정답을 찾는 방법. 아무래도 무식하게(?) 직관적인 방법이라 이해하기가 쉽고 문제의 정확한 도출이 가능하다
  • 하지만, 문제를 해결하는데에는 확실한 방법일진 몰라도 효율적인 동작방법이라고 할순 없다.

완전 탐색 알고리즘에 대한 부분은 역시나 따로 글로 작성해두어야겠다.

접근 방법

  • 시험은 최대 10000문제로 구성되어있다.
  • 문제의 정답은 1,2,3,4,5로만 구성되어 있다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return 하는 값을 오름차순으로 정렬해서 return 한다.
def solution(answers):
	
    ''' 
    제한조건에 문제는 최대 10000문제로 구성되어 있기때문에 
    모든 수포자들이 답을 찍는 규칙을 10000개로 맞춰주었다. 
       	        				'''
        
    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 = []     
    count_one = 0
    count_two = 0
    count_three = 0


    for i in range(len(answers)):   
        if answers[i] == one[i]  :
            count_one += 1
        if answers[i] == two[i]:
            count_two += 1
        if answers[i] == three[i]:
            count_three += 1
	# if를 따로 3개로 두어야 수포자 3명의 값을 체크할수가 있다.
    
    result.append(count_one)
    result.append(count_two)
    result.append(count_three)
	# 모든 값을 result 에 넣어준다
    
    max_count = max(result)  # max를 이용하여 temp변수안에 수포자중 가장 점수를 많이 받은 사람을 max_count에 선언해준다
    answer = []  
    
    for i in range(len(result)):  
        if result[i] == max_count:  # 만약 max_count 와 수포자들의 점수가 같다면 answer에 i+1 값을 넣어준다.
            answer.append(i+1)


    return answer
    
  1. 먼저 제한조건에 문제는 최대 10000문제라는 제한 조건이 있기때문에 수포자들의 답을 10000에 맞춰주었다. ( 애초에 answer 5개가 계속 반복이라 상관없긴하다.. )

  2. 수포자 세명의 점수를 각각 변수에 따로 담아서 체크해준다.

  3. 점수를 체크 할때에는 for 문을 이용한 완전탐색 알고리즘을 사용하였다.

  4. 각각 수포자의 점수를 체크 할때 각각 if문을 사용해주어야 모든 수포자의 점수를 체크할수가 있다. ( if 대신 elif 를 사용해서 계속 애먹음.. )

  5. max_count 변수에 max()를 이용하여 큰값을 넣고 수포자들의 점수와 비교하는 방법을 사용

느낀점

이번 문제를 풀면서 느낀점은 if,elif 의 적절한 사용법을 다시 한번 숙지하는 계기가 되었다.

분명 이론상으론 문제가 없는데 자꾸 값이 생각하는대로 안나와줘서 답답했었다. 하지만, elif를 if로 바꾸는 순간 기적같이 해결 되었다.

그리고 이번 문제를 풀면서 알게된 완전탐색 알고리즘에 대해 좀 더 알수 있는 계기가 되었다. 사실 그동안 내가 자주 쓰던게 완전 탐색 알고리즘 이라는걸 이번에 알게된건 비밀.. 좀 더 깊게 알아보아야겠다 . 아마 다음글은 완전 탐색 알고리즘에 대해 확실한 정리를 하는 글로 작성을 할것 같다. 코딩을 하면 할수록 몰라도 알아가는 재미가 아주 쏠쏠하다.

profile
도비코딩

0개의 댓글