https://www.acmicpc.net/problem/10026
나의 코드
def check(color): # 색이 같은 부분의 구역 갯수 구하는 함수
global cnt
if not visited[i][j] and arr[i][j] == color:
q.append([i, j])
visited[i][j] = 1
while q:
x, y = q.pop(0)
for k in range(4):
ni = x + di[k]
nj = y + dj[k]
if 0 <= ni < N and 0 <= nj < N and visited[ni][nj] == 0 and arr[ni][nj] == color:
visited[ni][nj] = 1
q.append([ni, nj])
cnt += 1
N = int(input())
arr = [list(input()) for _ in range(N)]
visited = [[0]*N for _ in range(N)]
q = []
di = [0, 1, 0, -1]
dj = [1, 0, -1, 0]
ans1 = 0
ans2 = 0
for i in range(N):
for j in range(N):
cnt = 0
check('R')
check('B')
check('G')
ans1 += cnt
visited = [[0]*N for _ in range(N)] # 방문리스트 초기화
for i in range(N):
for j in range(N):
cnt = 0
if not visited[i][j] and (arr[i][j] == 'R' or arr[i][j] == 'G'):
q.append([i, j])
visited[i][j] = 1
while q:
x, y = q.pop(0)
for k in range(4):
ni = x + di[k]
nj = y + dj[k]
if 0 <= ni < N and 0 <= nj < N and visited[ni][nj] == 0 and (arr[ni][nj] == 'R' or arr[ni][nj] == 'G'):
visited[ni][nj] = 1
q.append([ni, nj])
cnt += 1
check('B')
ans2 += cnt
print(ans1, ans2)
결과

함수를 안쓰는 버릇이 있다보니 함수를 어떻게 써야할지 모르겠어서 일단 반복되는 부분들도 다 함수로 적어서 제출했더니 최종코드의 2배는 되는 길이였다. 그래서 함수를 써봐야겠다고 생각하고 함수를 정의하고 반복되는 부분은 삭제했다. 아래에 color가 R or G 일 때의 함수는 어떻게 적용할지 몰라서 check(R) or check(G)를 썼는데 출력값이 안나와서 or 대신 and를 써봤고 틀릴 것 같지만 그냥 출력값이랑 같길래 제출해봤더니 역시나 틀림...ㅎㅎ 그래서 그 부분만 함수를 안쓰고 원래 코드로 제출해서 통과했다. 다른 사람들은 어떤 함수를 써서 코드를 짰을지 궁금하지만 지금 시간이 늦었으므로 다음에 생각나면 찾아봐야겠다!
'스터디 1일 1커밋' 카테고리의 다른 글
| 240511 [BOJ/백준] 13335. 트럭 (0) | 2024.05.11 |
|---|---|
| 240511 [BOJ/백준] 9012. 괄호 (0) | 2024.05.11 |
| 240506 [BOJ/백준] 14620. 꽃길 (0) | 2024.05.06 |
| 240501 [BOJ/백준] 21921. 블로그 (1) | 2024.05.01 |
| 240501 [BOJ/백준] 17484. 진우의 달 여행(small) (0) | 2024.05.01 |