반응형
이 문제 또한 컴포넌트를 확인하는 문제에서 컴포넌트 속 값의 갯수 까지 구하는 문제였다.
구름 알고리즘 먼데이에서 비슷한 문제를 푼 기억(모래섬)이 있어 아이디어는 쉽게 떠올렸지만 이상한 곳에서 발목이 잡혔다.
처음 2번은 오기로 global변수를 줄여 메모리 아끼고자 함수 인자값을 이용해 집의 숫자를 구할려고했다.
그런데 안풀려서 그냥 global로 변수 값을 갱신했다.
그러나 2번째 내가 놓친 부분은 str상태에서 숫자들을 정렬을 하면
숫자 크기로 정렬을 하는것이 아닌, str[0]번째 숫자의 값으로 정렬을 한다.
예를 들어
a = ['20','3']
print(sorted(a))
-----------------
['20','3']
이렇게 그대로 나온다. 왜냐하면 0번째 값이 2가 더 작아서 그렇다.
str상태에서 우선순위는 숫자(0번째 자리만)>알파벳 순이다.
이걸 놓친 나는 10과 3을 정렬하는 문제에서 오름차순이 아닌 내림차순으로 정렬해서 틀렸다.
결국 str리스트를 정렬할때만 다시 값들을 int로 변환하고 다시 join함수를 쓰기 위해 str로 바꾸었다.
print('\n'.join(list(map(str,sorted(list(map(int,rst)))))))
전체코드
import sys
input = sys.stdin.readline
size = int(input().strip())
stg = []
for i in range(size):
stg.append(list(input().strip()))
visit = [[0 for i in range(size)]for j in range(size)] #중복 진입 방지
dx = [0,0,1,-1] #4방향으로 이동하기위한 설정
dy = [1,-1,0,0]
def dfs(x,y):
global tmp
tmp+=1
for i in range(4): #한 정점에서 위,아래,오른쪽,왼쪽 이동하기 위한 반복문
nx,ny = dx[i],dy[i] #갱신된 위치
if 0<=x+nx<size and 0<=y+ny<size and int(stg[y+ny][x+nx])==1 and not visit[y+ny][x+nx]: #갱신된 위치가 0과 최대값 사이, 값이 1이고 방문한적이 없는!
visit[y+ny][x+nx] = 1 #방문 완료
dfs(x+nx,y+ny) #진입
cmplx = 0 #컴포넌트 수
rst = []
for i in range(size):
for j in range(size):
if int(stg[i][j])==1 and not visit[i][j]:
tmp = 0
visit[i][j] = 1
cmplx+=1
dfs(j,i)
rst.append(str(tmp))
print(cmplx)
print('\n'.join(list(map(str,sorted(list(map(int,rst)))))))#정렬을 위해 int로 바꾸어서 정렬, 후에 join을 위해 다시 str로 변환반응형
'알고리즘 문제들 으악 > 백준' 카테고리의 다른 글
| [python]1012번 유기농 배추 (0) | 2022.12.20 |
|---|---|
| [python]25682번 체스판 다시 칠하기 2, 2000*2000제한 사항 확인 (0) | 2022.12.19 |
| [python]11279번 최대 힙, 힙 사용법 (0) | 2022.12.12 |
| [python]1260번 DFS와 BFS, print문 end 사용으로 최적화 (0) | 2022.12.11 |
| [python]2606번 바이러스, 컴포넌트 확인 & 최적화 (0) | 2022.12.11 |