본문 바로가기

프로그래밍/알고리즘4

BFS&DFS 정복기 BFS 주로 deque를 사용하며 시작하게 된다.from collections import deque 이후 사용할 배열을 입력 받고visited=[[False]*N for _ in range(M)] 방문을 확인하는 visited 배열을 만들게 된다.def BFS(x,y): queue=deque() queue.append((x,y)) visited[x][y]=True while queue: dx=[1,-1,0,0,1,1,-1,-1] dy=[0,0,1,-1,1,-1,1,-1] x,y=queue.popleft() for i in range(8): hx=x+dx[i] hy=y+dy[i] .. 2024. 6. 13.
불변 객체, 가변 객체 Python을 활용하여 리스트를 만드는 과정에서 무심코 넘기고 있었던 개념이 궁금하여 찾아 보게 되었다. A=[0]*15  or A=[0 for _ in range (15)] 두 방식으로 리스트를 만드는데에는 큰 차이가 없다. 하지만 2차원 배열을 만드려고 할때 부터 문제가 생긴다.  A=[[0]*15 ]*5   //   B=[[0 for _ in range (15)] for _ in range(5)] 두 방식으로 만들 경우 B에서는 리스트의 값을 조정할 때 문제는 없지만 A에서 리스트 데이터 값을 변화 시킬 때 문제가 발생한다. 하나의 리스트 안의 값을 바꾸어도 나머지 행에 있는 데이터 값들도 변화한다는 것이다. 이 점을 다시 공부해보니 불변 객체, 가변 객체에서의 복사에서 문제가 생긴다는 점을 알게 .. 2024. 6. 11.
[백준] Python 문법 정리(1) 파이썬에서의 문법들을 계속해서 정리해볼까 한다. map(함수,이터레이터값): 함수 인자 하나와 반복되는 이터레이터 인자를 받아 변환해주는 방식이다. a,b=(map(int,input().split())) ##1번 a,b=(map(int,input())) ## 2번 print(a,b) 여기서 map에 대한 개념의 혼동이 있었다. map을 사용할시에 map자료형으로 반환되어서 list로 감싸주어야하는 것이 아닌가 생각했는데 여러 값이 있을 때에는 이터레이터에서 차례로 값을 꺼내어 준다고 한다. a=(map(int,input().split())) 즉 이런식으로 하게 된다면 a에는 이터레이터만 들어가게 되는것이다. 여러 값일 경우에만 이터레이터가 자동으로 값을 넘겨주는 방식이다. 굳이 이 방식을 사용하고 싶다면.. 2024. 2. 8.
[백준] Greedy 알고리즘-1339번 채감 난이도:★ ★ ★ ★ ☆ 문제를 풀때 단순히 길이가 더 긴 문자열에 처음 알파벳에 숫자 9부터 차례로 주는 방식을 선택하여 계산을 하였다. 문제를 해결하는 과정에서 리스트의 관리에서 복잡하게 사용하여 시간을 많이 잡아 먹었다. 막상 다 풀었을때 입력 예시 4개 모두 성공하였지만 틀렸다고 나왔다.... 원인을 찾지 못하여서 구글링을 하여보았다. 다들 한 알파벳의 나오는 개수를 구한후 마지막에 9부터 차례로 가중치를 곱하여 더해주는 방식을 사용하였다. 내가 너무 쉽게 생각한 것 같았다. 앞으로 숫자에서의 그리디 문제는 좀더 꼼꼼히 방정식을 생각해서 사용해보면 좋을 것 같다. import sys N = int(sys.stdin.readline()) a=[] d=[] b=[-1]*26 nowmax=9 fo.. 2024. 1. 26.