Algorithm/Simulation

프로그래머스 모의고사

_은선_ 2025. 1. 4. 19:26
728x90
SMALL

완전탐색 문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


💡 풀이코드 (성공 - 내코드)

def brute_forth(l, ans):
    a = []
    b = []
    c = []
    num1 = [1, 2, 3, 4, 5]
    num2 = [1, 2, 3, 4]
    num3 = [3, 1, 2, 4, 5]
    
    
    cnt = [[0,1], [0,2], [0,3]]
    
# 1번
    for i in range(l // 5 + 1):
        if len(a) == l: break
        for j in range(1, 6):
            a.append(j)
            
            if ans[len(a)-1] == a[len(a)-1]: cnt[0][0] += 1
            if len(a) == l: break
            
# 2번
    for i in range(l // 8 + 1):
        if len(b) == l: break
        for idx, j in enumerate(num2):
            
            b.append(2)
            if ans[len(b)-1] == b[len(b)-1]: cnt[1][0] += 1
            
            if len(b) == l: break
            
            # if i * 8 + idx == l: break
            
            if j == 1:
                b.append(j)
            else:
                b.append(j + 1)
            if ans[len(b)-1] == b[len(b)-1]: cnt[1][0] += 1
            
            if len(b) == l: break
    # 3번
    for i in range(l // 10 + 1):
        if len(c) == l: break
        for j in num3:
            c.append(j)
            if ans[len(c)-1] == c[len(c)-1]: cnt[2][0] += 1
            if len(c) == l: break
            c.append(j)
            if ans[len(c)-1] == c[len(c)-1]: cnt[2][0] += 1
            if len(c) == l: break
                
    
 
    cnt.sort(reverse=True)
    print(cnt)
    
    maxNum = max(cnt, key = lambda x:x[0])[0]
    ret = []
    
    for i in range(3):
        if maxNum == cnt[i][0]:
            ret.append(cnt[i][1])
    print(ret)
    return sorted(ret)
    


def solution(answers):
    answer = []
    answerss = answers
    answer = brute_forth(len(answers), answerss)
    
    
    return answer

 

더럽게 짰다 ....

 

짚고 넘어갈 Point

  • tuple은 값 변경이 불가능하므로 2차원 리스트 사용
  • 2차원 리스트에서 첫번째 열 기준으로 가장 큰 값을 뽑기 위해 lambda 사용
    maxNum = max(cnt, key = lambda x:x[0])[0]

 


다른 사람 풀이

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]
    resullt = []
    
    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

 


참고 문헌

https://velog.io/@yeonii/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AA%A8%EC%9D%98%EA%B3%A0%EC%82%AC-python

 

프로그래머스 | 모의고사 - python

수포자 1,2,3이 찍는 방식이 담긴 list를 만들어 준 다음에 answer의 index와

velog.io

 

 

728x90
LIST