a=[list(input())for i in range(10)]
b,c=map(int,input().split())
 
def DFS(f,b):#기준점. DFS 재귀 될때마다 바뀜
if f<0 or f>9 or b<0 or b>9:#인덱스 에러 안나게 처리
return
elif a[b][f]=="*": #이미 탐색(현재 배열값이 "*"이라면) 재귀 불렀던 줄로 돌아가기
return
a[b][f]="*" #아직 탐색 안했다면(현재 배열값이 "_"인 상태) 현재 배열값을 "*"로 바꿈
DFS(f+1,b) #기준점으로부터 아래 한칸 탐색. 재귀 부르면(f+1,b)가 기준점됨
DFS(f-1,b) #기준점으로부터 위 한칸 탐색.   재귀 부르면(f-1,b)가 기준점됨
DFS(f,b+1) #기준점으로부터 오른쪽 한칸 탐색. 재귀 부르면(f,b+1)가 기준점됨
DFS(f,b-1) #기준점으로부터 왼쪽 한칸 탐색. 재귀 부르면(f,b-1)가 기준점됨
 
DFS(b,c) #첫번째 입력된 기준점 보내기
 
for i in range(10): # 출력
  print(''.join(a[i]))
 
import sys 
sys.setrecursionlimit(10**7)
 
m,n,k = list(map(int, input().split()))
 
arr=[[0]*(n+1) for _ in range(m+1)]
 
for _ in range(k):
  x1,y1,x2,y2= (map(int, input().split()))
  for i in range(y1,y2):
    for j in range(x1, x2):
      arr[i][j] = 1
 
def dfs(x,y):
  if x<0 or x>n-1 or y<0 or y>m-1:
    return 0
 
  if arr[y][x]:
    return 0
 
  arr[y][x]=1
  return 1 + dfs(x-1,y) + dfs(x+1,y) + dfs(x,y-1) + dfs(x,y+1)
 
cnt=[]
 
for i in range(m):
  for j in range(n):
    if arr[i][j] ==0:
      cnt.append(dfs(x=j, y=i))
 
print(len(cnt))
print(*sorted(cnt))
 
from collections import deque
 
def bfs(x,y):
  q=deque()
  q.append([x,y])
  visited[x][y]=1
 
  while q:
    x,y=q.popleft()
 
    for i in range(8):
      nx,ny =x+dx[i], y+dy[i]
      if 0<=nx<h and 0<=ny<w:
        if lack[nx][ny]=='L' and visited[nx][ny]==0:
          visited[nx][ny]=1
          q.append([nx,ny])
 
global w, h
w, h = map(int, input().split())
 
global lack
lack=[]
 
for i in range(h):
  lack.append(list(map(str,input().split())))
 
 
global dx, dy
dx=[0,0,1,-1,1,-1,1,-1]
dy=[1,-1,0,0,1,-1,-1,1]
 
cnt=0
 
global visited
visited=[[0 for x in range(w)] for y in range(h)]
 
for i in range(h):
  for j in range(w):
    if lack[i][j]=='L' and visited[i][j]==0:
      bfs(i,j)
      cnt+=1
 
print(cnt)
 
일단 간단히 하자면, 등고선의 시작에서 나머지는 값을 빼면서 출력함.
단 배열은 0 부터 시작이라서 (x-1, y-1)이고, 시작값이 1이므로 
abs(i-(x-1)) + abs(j-(y-1)) + 1
 
그럼 절대값은 왜 넣었나? 필요하니깐.....중점에서 -값도 나오기 때문이다.
 
 
n = int(input())
x, y = map(int, input().split())
 
for i in range(0, n):
    for j in range(0, n):
        print(abs(i-(x-1)) + abs(j-(y-1)) + 1, end=' ')
    print()
 
dfs의 전형적인 방법으로 
1) 범위먼저 설정
2) 방문가능한지와 맞는 색인지 확인해보고, 
3) 앞뒤좌우에 있으면 cnt를 늘린다.
 
물론 i, j의 for loop로 돌려서 모두 찾아야지요~
 
이 문제를 풀면서 의문점
1. arr에 값을 넣을때 왜 다른가?
1) arr = [list(map(int, input().split())) for _ in range(7)] 
는 ok
2) 
for _ in range(7):
  arr = list(map(int, input().split()))
에서 arr[1][1]의 타잎값은 안나오지???
궁금해...
 
 
arr = [list(map(int, input().split())) for _ in range(7)] 
 
 
#for _ in range(7):
#  arr = list(map(int, input().split()))
 
#print(type(arr))
 
visited=[[0]*7 for _ in range(7)]
 
res=0
 
def dfs(x,y,arr,v,val):
  if x<0 or x>=7 or y<0 or y>=7:
    return 0
  cnt=0
  if v[x][y]==0 and arr[x][y] == val:
    v[x][y] = arr[x][y]
    cnt+=1
    cnt+= dfs(x,y+1,arr,v,val)
    cnt+= dfs(x,y-1,arr,v,val)
    cnt+= dfs(x+1,y,arr,v,val)
    cnt+= dfs(x-1,y,arr,v,val)
  return cnt
 
#print(type(arr[1][1]))
 
for i in range(7):
  for j in range(7):
    if dfs(i,j,arr,visited,arr[i][j]) >= 3:
      res+=1
 
print(res)
 
 
정말 집중의 차이인가? 5분이면 풀 문제를;;;
 
arr=[0]*4
arr= list(map(int, input().split()))
 
arr.sort(reverse=True)
 
cnt = 0
 
def plus(a,b,c):
  global cnt
 
#  if cnt > 100:
#    return 0
 
  
#  print("10:",a, b, c, cnt)
  if a!=b:
    cnt+=1
#    print("00:",a, b, c, cnt)
    return plus(a, b+1, c+1)
  elif a==b and b!=c and a >c:
    cnt+=1
#    print("01:",a, b, c, cnt)
    return plus(a, b, c+2)
  elif c > a or c> b:
    cnt+=1
#    print("02:",a, b, c, cnt)
    return plus(a+1, b+1, c)
 
plus(arr[0], arr[1], arr[2])
 
print(cnt)

+ Recent posts