Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- filebeat
- GIT
- 호스팅
- elasticsearch
- 정보처리기사실기
- 벽부수고이동하기
- python3 #동적계획법 #permutations
- javascript #콜백함수 #비동기
- 2206
- KT인턴
- logstash
- 안드로이드스튜디오
- container
- image
- 계정 여러 개 동시 사용
- 개발자로드맵
- github
- 백준
- java
- KT
- docker
- YOLO
- HAXM
- tensorflow2
- COLAB
- kibana
Archives
- Today
- Total
코딩하고자용 블로그
오늘의 알고리즘 일기(200527) 본문
1. 가장 큰 정사각형 찾기 (프로그래머스 level 2)
def solution(board):
answer = 0
breaker = False
li=[]
standard = len(board[0]) # 가로
num = len(board) # 세로
minnum = min(num,standard)
for i in range(minnum, 0,-1): #(4,3,2,1)
for j in range(0, len(board)-i+1): #세로부터
for k in range(0,len(board[0])-i+1): #가로부터
for l in range(j,j+i):
li= li+board[l][k:k+i]
if 0 in li:
li = []
continue
else :
answer=i
breaker =True
break
if breaker == True:
break
if breaker == True:
break
return answer*answer
모든 정사각형을 조사하듯이 풀었다.
어찌어찌 돌아는 갔으나 역시 효율이 개판이기 때문에(O(n^4)) 위와 같은 형식으로 푸는 것은 지양한다.
이번에 공부하면서 처음 동적계획법(dp)을 접하게 되었는데, 이 문제에 대한 공부는 아래 블로그를 참고하였다.
https://codedrive.tistory.com/53
우선 동적 계획법이란 복잡한 문제를 여러개의 간단한 문제로 나누어 푸는 방법을 말하는데, 이러한 연습이 더욱 필요할 것을 느꼈다. 핵심은 왼쪽, 왼쪽 대각선, 위쪽 값들을 확인하는 것이다.
참고로 이차원 리스트에서 for과 enumerate 값을 이용하면 아래와 같이 나온다.
board = [[1,0,0,1],[0,0,1,1],[1,1,1,1],[0,1,1,1]]
for y, line in enumerate(board):
print(y,line)
--결과값--
0 [1, 0, 0, 1]
1 [0, 0, 1, 1]
2 [1, 1, 1, 1]
3 [0, 1, 1, 1]
2. 소수찾기(프로그래머스 level 2)
from itertools import permutations
def solution(numbers):
ll = []
cnt = 0
for i in range(1,len(numbers)+1):
ll += list(map(int, map(''.join,permutations(numbers,i))))
ll = set(ll)
for i in set(ll):
for j in range(2,int(i**0.5)+1):
if i%j == 0:
ll.remove(i) # 소수가 아닌 수 제거
break
if 1 in ll:
ll.remove(1)
if 0 in ll:
ll.remove(0)
cnt=len(ll)
return cnt
이 코드에서 핵심은 permutations(순열) 함수 사용이다.
permutation은 순열이라는 뜻이며, 고등학교 때 배운 n개의 원소 중 r개의 원소를 뽑은 집합을 리턴해준다.
따라서 for문으로 1개부터 최대 개수까지의 순열을 리스트를 만들어 넣어준다.
[예제]
print(list(map(''.join,permutations('abc',2))))
--결과--
['ab', 'ac', 'ba', 'bc', 'ca', 'cb']
'알고리즘 일기' 카테고리의 다른 글
오늘의 알고리즘 일기(200609) (0) | 2020.06.09 |
---|