내 잡다한 노트

프로그래머스) 무인도 여행 파이썬 본문

백준, 프로그래머스(파이썬)

프로그래머스) 무인도 여행 파이썬

peanutwalnut 2023. 3. 29. 23:14

문제)

https://school.programmers.co.kr/learn/courses/30/lessons/154540

 

프로그래머스

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

programmers.co.kr

 

소스코드 )

def solution(maps):
    answer = []
    dx = [0, 0, 1, -1]
    dy = [1, -1, 0, 0]
    
    visited = []
    for _ in range(len(maps)): # visited 셋팅
        temp = []
        for _ in range(len(maps[0])):
            temp.append(False)
        visited.append(temp)
    
    for i in range(len(maps)):
        for j in range(len(maps[0])):
            if not visited[i][j] and not maps[i][j] == 'X': #방문 안했고 바다가 아니라면
                q = [(i, j)]
                sum = 0
                visited[i][j] = True
                while q:
                    temp_x, temp_y = q.pop(0)
                    sum += int(maps[temp_x][temp_y])
                    
                    for k in range(4):
                        nx, ny = temp_x + dx[k], temp_y + dy[k]
                        if 0 <= nx < len(maps) and 0 <= ny < len(maps[0]):
                            if not visited[nx][ny] and not maps[nx][ny] == 'X':
                                q.append((nx, ny))
                                visited[nx][ny] = True
            else:
                continue                    
            answer.append(int(sum))
                
    if len(answer) !=0:
        answer.sort()            
    else:
        answer.append(-1)
    
    return answer

 

 

좀 오랜만에 코테 문제를 풀다보니 visited를 for문까지 할 필요없이 한 줄로 끝내는 방법을 알았는데

금세 까먹었다... ㅡㅡ;;;

visited = [[False] * m for _ in range(n)] 을 기억하자.

 

bfs문제는 visited의 방문체크와 nx, ny가 지도를 벗어나는지도 확인 잘 하면 됨.

이 문제는 기초문제였다.

추가로, len(maps[0])과 len(map)이 자주 쓰인다면 변수를 따로 만들어서 쉽게 쓰자.

'백준, 프로그래머스(파이썬)' 카테고리의 다른 글

[C++] 백준 1920 수 찾기  (0) 2023.09.07
백준 파이썬 13549 문제  (0) 2023.03.09
5014 스타트링크 백준 파이썬  (0) 2022.09.16
3197 백조의 호수  (0) 2022.08.11
17143 낚시왕 파이썬 백준  (0) 2022.07.16