N = int(input())
square = [[0] * 8] * N

for i in range(N):
    row = list(map(int, input().split()))
    square[i] = row

blue = 0
white = 0

# 세로 방향 x, 가로 방향 y
# 사분면
def split(x, y, n):
    # 전역 변수
    global blue, white
    paper_check = square[x][y]
    
    for i in range(x, x + n):
        for j in range(y, y + n):
            # paper_check과 같은 숫자가 아니면, 같은 색이 아니므로
            # 분리해서 다시 판단하도록 해줍니다.
            if(paper_check != square[i][j]):
                split(x, y, n//2) # 왼쪽 위
                split(x + n//2, y, n//2), # 오른쪽 위
                split(x, y + n//2, n//2) # 왼쪽 아래
                split(x + n//2, y + n//2, n//2) # 오른쪽 아래
                return
    
    if paper_check:
        blue += 1
    else:
        white += 1

split(0, 0, N)
print(f'{white}\n{blue}')

'# 코딩 문제 관련 > 파이썬' 카테고리의 다른 글

백준 1780번(python)  (0) 2020.05.04
백준 1992번(python)  (0) 2020.05.04
백준 2164번(python)  (0) 2020.05.03
백준 18258번(python)  (0) 2020.05.03
백준 4949번(python)  (0) 2020.05.02


from collections import deque

N = int(input())
deque = deque([i for i in range(1, N + 1)])

while(not (len(deque) == 1)):
    # 버리고,
    deque.popleft()
    # 맨 앞의 숫자를 뒤로 옮기자.
    move_num = deque.popleft()
    deque.append(move_num)
    
print(deque[0])

'# 코딩 문제 관련 > 파이썬' 카테고리의 다른 글

백준 1992번(python)  (0) 2020.05.04
백준 2680번(python)  (0) 2020.05.03
백준 18258번(python)  (0) 2020.05.03
백준 4949번(python)  (0) 2020.05.02
백준 10773번(python)  (0) 2020.05.02


import sys
from collections import deque

def push(queue, x):
    queue.append(x)
    
def pop(deque):
    return deque.popleft() if deque else -1

def size(queue):
    return len(queue)

def empty(queue):
    return 1 if not queue else 0

def front(queue):
    return queue[0] if queue else -1

def back(queue):
    return queue[-1] if queue else -1

deque = deque()

N = int(sys.stdin.readline().rstrip())

for _ in range(N):
    order = sys.stdin.readline().rstrip().split()
    
    command = order[0]
    
    if(command == "push"):
        push(deque, order[1])
    elif(command == "pop"):
        sys.stdout.write(str(pop(deque)) + "\n")
    elif(command == "size"):
        sys.stdout.write(str(size(deque)) + "\n")
    elif(command == "empty"):
        sys.stdout.write(str(empty(deque)) + "\n")
    elif(command == "front"):
        sys.stdout.write(str(front(deque)) + "\n")
    elif(command == "back"):
        sys.stdout.write(str(back(deque)) + "\n")

문제는 쉬운데 역시나 시간 맞추기가 힘든 문제.

우리가 잘 알고 있는 pop(0)은 빼고 다시 옮기는 O(n)의 시간이 소요되기 때문에 해당 문제에서는 바로 시간초과가 발생한다.

pop 부분을 이것저것 손봐서 해보긴했지만, 시간 더 소비하지 않고 다른 사람처럼 deque를 사용했다....

결론: collections의 deque 도움을 받자.

'# 코딩 문제 관련 > 파이썬' 카테고리의 다른 글

백준 2680번(python)  (0) 2020.05.03
백준 2164번(python)  (0) 2020.05.03
백준 4949번(python)  (0) 2020.05.02
백준 10773번(python)  (0) 2020.05.02
백준 2004번(python)  (0) 2020.04.28


def push(stack, x):
    stack.append(x)
    
def pop(stack):
    return stack.pop()

def top(stack):
    return stack[-1] if stack else -1

while(True):
    sentence = input()
    
    if(sentence == "."):
        break
    else:
        opend_stack = []
        sentence_check = True
        
        for i in sentence:
            if(i == "(" or i == "["):
                push(opend_stack, i)
            elif i == ")":
                if(top(opend_stack) == "("):
                    pop(opend_stack)
                else:
                    if(not opend_stack or top(opend_stack) == "["):
                        sentence_check = False
                        break
            elif i == "]":
                if(top(opend_stack) == "["):
                    pop(opend_stack)
                else:
                    if(not opend_stack or top(opend_stack) == "("):
                        sentence_check = False
                        break

        if(sentence_check and not opend_stack):
            print("yes")
        else:
            print("no")

중간중간 비어있는 스택이나 문제에서 제공된 예제를 전부 통과하고,

마지막에 "((((" 반례정도만 생각해주면 쉽게 해결 가능할 것입니다.

'# 코딩 문제 관련 > 파이썬' 카테고리의 다른 글

백준 2164번(python)  (0) 2020.05.03
백준 18258번(python)  (0) 2020.05.03
백준 10773번(python)  (0) 2020.05.02
백준 2004번(python)  (0) 2020.04.28
백준 1676번(python)  (0) 2020.04.27


def push(x):
    stack.append(x)

def pop():
    stack.pop()

K = int(input())
stack = []

for _ in range(K):
    num = int(input())
    pop() if num == 0 else push(num)
    
print(sum(stack))

'# 코딩 문제 관련 > 파이썬' 카테고리의 다른 글

백준 18258번(python)  (0) 2020.05.03
백준 4949번(python)  (0) 2020.05.02
백준 2004번(python)  (0) 2020.04.28
백준 1676번(python)  (0) 2020.04.27
백준 9375번(python)  (0) 2020.04.20