Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

No Limitation

[완전 탐색] 기초 연습 본문

프로그래밍

[완전 탐색] 기초 연습

yesungcho 2024. 3. 18. 19:25

난 완전 탐색이 왤케 어려운 것인가...

아래 기초 유형은 외우는 식으로도 해도 될거 같아서 가져옴

단순한 구현 연습들도 level 1~2이나 백준의 기초 유형들을 풀어가면서 익숙해져야겠다.. 코테 현장에서는 잘 안될 수 있으므로!

아래 문제는 생각보다 어려웠던 문제였다. 아마 내가 글을 잘 못 이해했을 수도 있다.
https://school.programmers.co.kr/learn/courses/30/lessons/86491?language=python3

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


그래서 위 글을 참고했는데
https://codingwonny.tistory.com/295

 

[프로그래머스] 최소직사각형 - Python / 파이썬

문제 설명 명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한

codingwonny.tistory.com


이 경우의 핵심은 "큰 값 중의 최대"와 "작은 값 중 최대"를 곱할 때 모두를 포함할 수 있는 최소 값이 나온다는 점이었다.
물론 그냥 가로에서 최대 x 세로에서 최대를 하게 되면 전체 면적 중 가장 큰 면적이 나올 것이다.

이건 좀 외울만한 유형이라 익히면 좋을 거 같다. 

def solution(sizes):
    min_arr = []
    max_arr = []
    for ele in sizes : 
        min_arr.append(min(ele))
        max_arr.append(max(ele))
    
    return max(max_arr)*max(min_arr)


https://school.programmers.co.kr/learn/courses/30/lessons/42840?language=python3

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


이 유형의 경우 [2,1,2,3,2,4,2,5,2,1,2,3,2,4,2,5,...] 와 같은 특정 패턴이 반복되는 것을 길이에 따라 어떻게 증가시켜주는 가에 대한 간단한 구현을 연습하기 좋은 문제.

일단 더럽게 대충 짜보았을 때

def solution(answers) :
    L = len(answers)
    stu1 = [1,2,3,4,5]
    stu2 = [2,1,2,3,2,4,2,5]
    stu3 = [3,3,1,1,2,2,4,4,5,5]

    stu1 = stu1*((L//5)+1)
    stu2 = stu2*((L//8)+1)
    stu3 = stu3*((L//10)+1)

    cor1 = 0; cor2 = 0; cor3 = 0

    for i in range(L) :
        if answers[i] == stu1[i] :
            cor1+=1
        if answers[i] == stu2[i] :
            cor2+=1
        if answers[i] == stu3[i] :
            cor3+=1

    max_val = max(cor1,cor2,cor3)
    
    lists = []
    lists.append((1,cor1))
    lists.append((2,cor2))
    lists.append((3,cor3))

    lists = sorted(lists,key=lambda x:x[1], reverse=True)

    final_stu = []
    for final in lists :
        if final[1] == max_val :
            final_stu.append(final[0])

    final_stu.sort()
    return final_stu

 

하지만 이런 쉬운 문제여도 반복 숙달이 필요하다. IDE 안써보고 하는 연습도 필요할 듯