point. dfs & dfs로 풀때 최대재귀 한도 설정하기 & 방향벡터 사용
#풀이 1
import sys
sys.setrecursionlimit(10000) # 최대재귀 한도설정
T = int(input()) # 테스트 케이스 갯수
B, ck = [], []
dx, dy = [1, 0, -1, 0], [0, 1, 0, -1] # 방향 설정
def dfs(x,y):
global B, ck
if ck[x][y] == 1:
return
ck[x][y] = 1
for i in range(4): # 4방향 확인
xx, yy = x + dx[i], y + dy[i]
if B[xx][yy] == 0 or ck[xx][yy] == 1:
continue
dfs(xx,yy) # 1이고 체크 안되어 있으면 dfs돔
def process():
global B, ck
M, N, K = map(int, input().split())
B = [[0 for i in range(50+2)] for _ in range(50+2)] #배추밭
ck = [[0 for i in range(50 + 2)] for _ in range(50 + 2)] #체크
for _ in range(K):
X, Y = map(int, input().split())
B[Y+1][X+1] = 1 #배추가 있는곳 1로 변경
ans = 0
for i in range(1, N+1):
for j in range(1, M+1):
if B[i][j] == 0 or ck[i][j] == 1:
continue
dfs(i,j)
ans +=1
print(ans)
for _ in range(T):
process()
# 풀이 2
import sys
sys.setrecursionlimit(100000) # 최대 재귀한도 설정
def dfs(x, y):
visited[x][y] = True
directions = [(-1,0),(1,0),(0,-1),(0,1)] #방향
for dx, dy in directions:
nx, ny = x+dx, y+dy
if nx<0 or nx>=n or ny<0 or ny >=m:
continue
if array[nx][ny] and not visited[nx][ny]:
dfs(nx,ny)
for _ in range(int(input())): # 테스트 케이스 만큼
m,n,k = map(int, input().split())
array = [[0]*m for _ in range(n)] # 배추밭
visited = [[False]*m for _ in range(n)] # 체크 확인용
for _ in range(k): # 배추가 있는 좌표에 1
y,x = map(int, input().split())
array[x][y]=1
result = 0
for i in range(n):
for j in range(m):
if array[i][j] and not visited[i][j]: #배추가 있는데 방문안한 곳이면
dfs(i, j)
result+=1
print(result)
단계별 풀기 - 문자열
#11654 아스키 코드 (브론즈5)
point. 아스키코드 변환 함수 ord()
n = input()
print(ord(n))
# 11720 숫자의 합 (브론즈2)
point. 각자리 더하기 - 숫자 문자로 받아서 각 자리수 숫자로 더하기
n = int(input())
n_num = input()
sum = 0
for i in n_num:
sum += int(i)
print(sum)
# 10809 알파벳 찾기 (브론즈2)
point. 문자열 위치 찾기 함수 s.find()
s = input()
result = []
alpa = 'abcdefghijklmnopqrstuvwxyz'
for i in alpa:
result.append(s.find(i))
for i in result:
print(i, end=" ")
# 2675 문자열 반복 (브론즈2)
point. 문자곱은 반복횟수
tc = int(input())
for i in range(tc):
R, S = input().split()
result = ""
for i in S:
result += i*int(R)
print(result)
# 1157 단어 공부 (브론즈1)
point. 문자 개수 세기 count() / 문자 위치 index()
s = input()
s_up = s.upper()
apla = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
result = []
for i in apla:
result.append(s_up.count(i))
if result.count(max(result)) > 1:
print("?")
else:
max_index = result.index(max(result))
print(apla[max_index])
반응형
'알고리즘 > baekjoon' 카테고리의 다른 글
20210115_코테공부 (0) | 2021.01.14 |
---|---|
20210114_코테공부 (0) | 2021.01.14 |
20210113_코테공부 (0) | 2021.01.13 |
20210111_코테공부 (0) | 2021.01.11 |
20210107_코테공부 (0) | 2021.01.07 |