반응형
from collections import deque

n, m = map(int,input().split())
temp = []
for _ in range(n):
    aaa = input()
    aa = []
    for a in aaa:
        aa.append( int(a))

    temp.append(aa)

# print(temp)
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]


visited=[(0,0)]
round = 0
stack = deque ()
stack.append((0,0, 0) )
pointX = 0
pointY = 0
while pointX != n-1 or pointY != m-1:
    pointX, pointY, round =stack.popleft()
    for i in range(4):
        temp_pointX  =pointX+ dx[i]
        if temp_pointX <0 or temp_pointX> n-1:
            continue
        temp_pointY  =pointY+ dy[i]
        if temp_pointY <0 or temp_pointY >m-1:
            continue
        if temp[temp_pointX][temp_pointY] ==0:
            continue
        else:
            temp[temp_pointX][temp_pointY] = 0
            stack.append((temp_pointX, temp_pointY, round+1) )


print(round+1)
반응형
반응형

1. 발단

어떻게 하면 객체지향 프로그래밍 지식을 한 시간안에 잘 전달할 수 있을까? 이러한 고민에서 이 시리즈가 시작되었다.

필자는 매주 일요일 cs지식공유스터디를 하는데, 각자 공부한 것을 30~1시간정도 나누는 시간이다.

그래서 필자가 최근 열심히 공부한 객체지향을 나누고 싶은데, 이게 객체지향 특성상 말로 떠든다고 절대 와닿지 않는다.

특히 solid원칙은 직접해보고 생각해보고, 리팩토링을 해봐야 느낄수 있는 영역이라고 생각된다.

 

2. 전개

그러던중 필자는 디자인패턴을 공부하고 있었는데 너무 노잼이었다. 이 역시 객체지향을 처음 공부할떄랑 비슷한 느낌이 드는건데, 그거 좋은거 알겠는데, 머 어쩌라고? 이런느낌이 드는건 어쩔 수 없다.

이때 머릿속을 스쳐지나간 생각이 아. 디자인패턴을 역으로 solid 원칙 및  4기둥에 비추어 분석하고, 이를 같이 나눠보면 나도 공부되고 스터디원도 공부되지 않을까? 생각이 들었다.

 

 

반응형

'computer 지식 > 디자인패턴으로 알아보는 객체지향' 카테고리의 다른 글

디자인 패턴 용어들  (0) 2022.01.08
#1 팩토리패턴  (0) 2021.11.28
반응형
from copy import deepcopy


n= int(input())
q = int(input())
temp_ans = [[0 for _ in range(n)] for k in range(n)  ]

center = n//2

temp_ans[center][center]=1
temp_ans[center-1][center]=2
temp_ans[center-1][center+1]=3
temp_ans[center][center+1]=4
temp_ans[center+1][center+1]=5
temp_ans[center+1][center]=6
temp_ans[center+1][center-1]=7
temp_ans[center][center-1]=8
temp_ans[center-1][center-1]=9
temp_list =[(center,center), (center-1,center), (center-1,center+1), (center,center+1),(center+1,center+1), (center+1,center),(center+1,center-1),(center,center-1),(center-1,center-1)]
now= (center-1, center-1)

root ="up"
if n>3:
  for i in range(10, n**2+1):
    if root =="up":
      if temp_ans[now[0]][ now[1]+1] !=0:
        temp_ans[now[0]-1][now[1]] = i
        now = (now[0]-1, now[1])
      else:
        temp_ans[now[0]][now[1]+1] = i
        now = (now[0], now[1]+1)
        root="right"
      j,k = now
      temp_list.append( (j,k))
      continue
    if root =="right":
      if temp_ans[now[0]+1][ now[1]] !=0:
        temp_ans[now[0]][now[1]+1] = i
        now = (now[0], now[1]+1)

      else:
        temp_ans[now[0]+1][now[1]] = i
        now = (now[0]+1, now[1])

        root="down"
      j,k = now
      temp_list.append( (j,k))
      continue
    if root =="down":
      if temp_ans[now[0]][ now[1]-1] !=0:
        temp_ans[now[0]+1][now[1]] = i
        now = (now[0]+1, now[1])

      else:
        temp_ans[now[0]][now[1]-1] = i
        root="left"
        now = (now[0], now[1]-1)
      j,k = now
      temp_list.append( (j,k))
      continue 
    if root =="left":
      if temp_ans[now[0]-1][ now[1]] !=0:
        temp_ans[now[0]][now[1]-1] = i
        now = (now[0], now[1]-1)

      else:
        temp_ans[now[0]-1][now[1]] = i
        root="up"
        now = (now[0]-1, now[1])
      j,k = now
      temp_list.append( (j,k))
      continue 


for row in temp_ans:
  for col in row:
    print(col, end=" ")
  print(sep='\n')

j,k =  temp_list[q-1]
print(j+1, k+1)
반응형
반응형
n = int(input())
temp=0
temp_counter={}
for i in range(n):
    a,b = map(int,input().split())
    if a in list(temp_counter.keys()):
        if b != temp_counter[a]:
            temp +=1
            temp_counter[a]=b
    else:
        temp_counter[a]=b

print(temp)
반응형
반응형
temp = []
for _ in range(5):
  temp.append(list(map(int,input().split())))

bingo = []
for __ in range(5):
  bingo.append(list(map(int,input().split())))

def bingo_check(temp):
  bingo_count=0
  for line in temp:
    if sum(line) == 0:
      bingo_count +=1

  for i in range(5):
    if temp[0][i]+temp[1][i]+temp[2][i]+temp[3][i]+temp[4][i] ==0:
      bingo_count+=1
  
  if temp[4][0]+temp[3][1]+temp[2][2]+temp[1][3]+temp[0][4] ==0:
    bingo_count+=1
  
  if temp[0][0]+temp[1][1]+temp[2][2]+temp[3][3]+temp[4][4] ==0:
    bingo_count +=1
  
  return bingo_count


def answer_check(bingo, temp):
  answer=0
  for order in bingo:
    for num in order:
      answer+=1
      for i in range(5):
        for j in range(5):
          if temp[i][j] == num:
            temp[i][j] = 0
            if bingo_check(temp)>=3:
              return(answer)

print(answer_check(bingo, temp))
반응형
반응형
quack = input()

next_q ={
  "q":"u",
  "u":"a",
  "a":"c",
  "c":"k",
  "k":"q"
}

temp=[]
printm1=False
for alphabet in quack:
  last_change = " "
  if len(temp)==0 and alphabet =="q":
    temp.append(alphabet)
    continue
  else:
    for temp_index in range(len(temp)):
      if next_q[temp[temp_index][-1]] == alphabet:
        temp[temp_index] += alphabet
        last_change = temp[temp_index]
        break
    if alphabet =="q" and last_change[-1] !="q":
      temp.append("q")
    if alphabet !="q" and last_change==" ":
      printm1 =True

for quackquack in temp:
  if quackquack[-1] !="k":
    printm1=True

if printm1:
  print(-1)

else:
  print(len(temp))
반응형

'computer 지식 > 알고리즘 정복기' 카테고리의 다른 글

2578 빙고 백준 파이썬  (0) 2021.10.13
4396 지뢰찾기 백준 파이썬  (0) 2021.10.13
1244 스위치 켜고 끄기 백준 파이썬  (0) 2021.10.13
백준 1212 파이썬  (0) 2021.10.11
백준 2753번 파이썬  (0) 2021.10.11
반응형
n= int(input(),8)

print(bin(n)[2:])
반응형

'computer 지식 > 알고리즘 정복기' 카테고리의 다른 글

12933 오리 백준 파이썬  (0) 2021.10.13
1244 스위치 켜고 끄기 백준 파이썬  (0) 2021.10.13
백준 2753번 파이썬  (0) 2021.10.11
백준 상어초등학교 21608 파이썬  (0) 2021.10.11
백준 2501번  (0) 2021.10.10
반응형
n = int(input())

if n%400 ==0:
    print(1)
elif n%100 ==0:
    print(0)
elif n%4 ==0:
    print(1)
else:
    print(0)
반응형

'computer 지식 > 알고리즘 정복기' 카테고리의 다른 글

1244 스위치 켜고 끄기 백준 파이썬  (0) 2021.10.13
백준 1212 파이썬  (0) 2021.10.11
백준 상어초등학교 21608 파이썬  (0) 2021.10.11
백준 2501번  (0) 2021.10.10
이 카테고리에 관하여  (0) 2021.10.10

+ Recent posts