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)
 
알고리즘은 머리의 상태에 따라 정말 다르긴 하다.....
이 간단한 것을...-.-;;
 
n, k = map(int, input().split())
arr=[0]*(n+1)
arr = list(map(int, input().split()))
 
#print(arr)
cnt = 0
 
for i in range(n):
#  print("arr[",i,"]=",arr[i])
  if int(arr[i]) >= k:
    cnt=i+1
#    print("i:",i, "cnt:", cnt)
    break
 
if cnt==0:
  cnt=n+1
 
print(cnt)
 
n, s = map(int, input().split())
arr=[0]*(n+1)
arr = list(map(int, input().split()))
 
cnt = 0
 
def part_sum(i, sum):
    global cnt
 
    if i >= n:
        return
    sum = sum+ arr[i]
 
    if sum == s:
        cnt = cnt + 1
    part_sum(i + 1, sum)
 
    sum = sum - arr[i]
    part_sum(i + 1, sum)
    
    
part_sum(0, 0)
print(cnt)
 
 
def count_changes(money, coins):
  memo=[None for _ in range(money+1)]
  memo[0]=0
 
  def dy_program(change):
    for total in range(1, change+1):
      min_val=total
      for coin in coins:
        if total >= coin:
          res=memo[total-coin]
          min_val=min(res, min_val)
      memo[total]=min_val+1
    return memo[change]
  return dy_program(money)
 
mo=int(input())
n=int(input())
arr=[0]*(n+1)
arr=list(map(int, input().split()))
 
print(count_changes(mo,arr)) 
 
부분합 최대 부분합은 이해하는 상태에서 풀면 그나마 손 쉽다
 
 
n=int(input())
do_p, to_p=map(int,input().split())
do_k=int(input())
arr_k=[0]*(n+1)
for i in range(n):
  arr_k[i]=int(input())
 
arr_k.sort(reverse=True)
#print(arr_k)
 
res=0
res1=0
 
def partial_sum(arr, a, b):
  arr = [0] + arr
  partial_sum = [0] * len(arr)
 
  for i in range(1, len(arr)):
    partial_sum[i] = partial_sum[i-1] + arr[i]
 
  partial_sum = partial_sum[1:]
#  print("partial_sum", partial_sum)
    
#  print("total sum", partial_sum[-1])
  
  if((a-1)<0):
    return partial_sum[b]
  else:
    return partial_sum[b] - partial_sum[a-1]
 
#print("aaaa=",partial_sum(arr_k, 0, 1))
 
 
for i in range(n):
  res1=(do_k+partial_sum(arr_k, 0, i))//(do_p+(to_p*(i+1)))
 
  if res < res1:
    res=res1
  elif res > res1:
    break
 
  
print(res)

+ Recent posts