Supersett
개발자의 하루
Supersett
Blockchain Dev
전체 방문자
오늘
어제
  • 분류 전체보기
    • 프론트
    • 회사생활
    • 블록체인
    • 프로젝트
      • 창업 프로젝트 (DRF + AWS)
      • Spring 프로젝트
    • [중앙대]멋쟁이 사자처럼
    • 기술서적
    • Problem Solving
      • 알고리즘
    • 일기장
      • 하루 정리
      • 삽질 일기
      • 조급할 때 눌러보기

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • DEPROMEET
  • 멋쟁이 사자처럼 면접
  • 프로젝트
  • 취업준비
  • 국비교육
  • 국비지원
  • 블록체인정보가공
  • 면접준비
  • 멋사 중앙대
  • 디프만16기
  • Luniverse
  • 구글소셜로그인
  • Multichain API
  • Near Scan
  • 국비
  • 비트코인
  • 니어프로토콜
  • java
  • 신입개발자
  • 컴퓨터학원
  • 자바스크립트
  • 글리치해커톤
  • 블록체인 서버설계
  • 멋쟁이 사자처럼 서류
  • 멋쟁이사자처럼 중앙대
  • 해커톤
  • Near Explorer
  • 초보개발자
  • 자바
  • 멋쟁이 사자처럼

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Supersett

개발자의 하루

[피드백] BFS문제 정리하기
Problem Solving/알고리즘

[피드백] BFS문제 정리하기

2022. 10. 20. 02:02

오늘 알고리즘을 풀며 헷갈렸던 부분, 해결 방법

0. bfs를 해줄때 할 수 있는 장치들

ㅡ 주변의 값을 1씩 증가시켜가며 탐색한다. (모두 탐색하는데 얼마나 걸리는지)

ㅡ 주변의 값을 방문 체크하고 일괄적으로 값을 변경한다.

ㅡ 주변의 값을 체크하면서 count 수를 늘려간다. (탐색하면서 몇개를 만났는지)

 

1. 2차원 배열과 그래프를 접목 시킬때,

list = [[1,2,3,4] , [5,6,7,8] , [9,9,9,9]]

(예)x,y = 1,2 인 부분의 값은

list[y][x] = list[2][1] = 9

 

(예)x,y = 0,1 인 부분의 값은

list[y][x] = list[1][0] = 5

 

2. 2차원 배열(m행 n열) 선언하기

#x,y
#5 7
m,n=map(int,sys.stdin.readline().split())

graph=[[0]*(n) for i in range(m)]

 

3. 뭔가 보인다 보여.. BFS 문제들의 해결 공통점

def bfs(x,y):
	#큐에 넣는다
    q=deque()
    q.append((x,y))
    
    #방문처리 한다
    graph[y][x]=1
    
    #갯수세는 조건이 있다면 변수 선언
    count=1
    
    #큐가 빈상태가 될때 까지 실행
    while q:
    	#가장 앞쪽에 있는것부터 실행
        x,y=q.popleft()
        #주변 탐색을 위한 세팅
        dx=[0,0,-1,1]    
        dy=[-1,1,0,0]
        for i in range(4):
            nx=x+dx[i]
            ny=y+dy[i]
            #경계값 설정
            if nx<0 or ny<0 or nx>=n or ny>=m:
                continue
            #아직 방문하지 않는 노드인지 확인
            if graph[ny][nx] == 0:
                count+=1
                #방문체크
                graph[ny][nx]=1
                #큐에 넣고 그 주변 탐색
                q.append((nx,ny))
    #리턴받은 값 활용하기
    return count
for i in range(n):
    for j in range(m):
    	#원하는 지점부터 탐색을 시작한다
        if graph[j][i]==0:
            answer.append(bfs(i,j))

자주 물어봐야겠다ㅎㅎ

 

 

 

 

 

'Problem Solving > 알고리즘' 카테고리의 다른 글

[알고리즘] 코딩테스트 합격을 위한, 나만의 알고리즘 로드맵 설정하기  (1) 2022.10.26
[알고리즘][왜이거써요?]list 와 deque, 분기를 잡자, 자주쓰는 list 함수  (1) 2022.10.06
[백준][파이썬] 1662 - 압축  (0) 2022.07.13
[백준][파이썬] 2504 - 괄호의 값 (런타임에러 발생..해결)  (0) 2022.07.12
[백준] 1931 - 회의실 배정 (그리디 알고리즘)  (0) 2022.07.08
    'Problem Solving/알고리즘' 카테고리의 다른 글
    • [알고리즘] 코딩테스트 합격을 위한, 나만의 알고리즘 로드맵 설정하기
    • [알고리즘][왜이거써요?]list 와 deque, 분기를 잡자, 자주쓰는 list 함수
    • [백준][파이썬] 1662 - 압축
    • [백준][파이썬] 2504 - 괄호의 값 (런타임에러 발생..해결)
    Supersett
    Supersett
    하루를 돌아보고 공부한 티를 내기 위해 블로그를 만들었습니다.

    티스토리툴바