프로그래머스 55일차 - 완전탐색 문제 모음(2) & SUM, MAX, MIN SQL 문제 모음
1. 피로도
완전탐색은 permutation, 소수찾기, 정렬 정도로 많이 풀 수 있다.
위 문제는 순열로 풀 수 있다.(모든 경우 찾기인데 효율성 테스트가 없을 때)
리스트의 조합 3개를 순서를 마구잡이로 만들어낸 것을 nums에 담고
이걸 for문을 돌려서 피로도 계산을 시킨다. 그리고 카운팅을 한다.
이렇게 각각 돌린걸 카운트하는게 cnt, 전체 카운팅이 answer
Max 함수를 써서 가장 큰 것을 리턴한다.
요약하자면,
answer = max(answer, cnt)는 현재 값과 클리어한 던전 수 사이의 최대값으로 변수를 업데이트하는 데 사용한다.
그래서 모든 순열에 걸쳐 클리어한 던전의 최대 개수를 리턴한다.
2. 전력망을 둘로 나누기
이것도 순열로 풀 수 있다. 모든 조합 + 효율성이 없기 때문이다.
해당 리스트의 조합을 순서를 바꾸면서 만들어내는데, 이걸 0 번만 꺼내서 비교를 한다.
순열끼리 비교해서 교집합연산으로 중복값을 찾는다.
카운트한 개수와 둘로 나눈 전력량의 나머지 개수와 비교해서 작은것을 리턴한다.
3. 모음 사전
해당 문자열을 담아두고
최대 5개까지가 단어의 길이이므로 1~5 길이의 순열을 만들면된다.
같은 문자가 나올 수 있도록 중복 순열을 사용한다.
해당 튜플을 리스트로 변환시켜서 문자열로 만든다음 리스트에 넣고
문자열 정렬을 해주면 알파벳 순서대로 정렬된다.
이 word의 인덱스 위치를 뽑아낸다.
인덱스는 0부터 이므로 +1을 해준다.
https://soundprovider.tistory.com/entry/python-itertools
itertools를 잘 활용하면 완전탐색은 다 풀 수 있을 것 같다.
SQL
1. 가장 비싼 상품 구하기
from 이전에 컬럼에서 max를 하면 가장 큰 row 1개만 뽑아내고 여러개를 뽑아내고 싶으면 from 절 뒤에서 조건을 단다.
2. 최댓값 구하기
날짜 dateformat도 max, min으로 큰수 작은수를 1개를 뽑을 수 있다.
3. 중복 제거하기
만약 1개의 컬럼값만 리턴하라고 했으면 from 이전에서 distinct로 중복을 제거한다.
distinct는 Null을 제외한다. 중복을 하지 않는다.
group by는 중복없애주고, 정렬도 해준다.