# 1021 유기농 배추 (실버2)

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

+ Recent posts