코테분석#8-3 Easy (백준 2048) 😨

정은경·2020년 4월 15일
0

알고리즘

목록 보기
25/125

1. 문제




2. 나의 풀이

3. 쌤's 풀이

  • 삼성 공채에 이와같은 문제가 나온다고 함
  • 그림이 많고, 그림에 대해 구현할 수 있는가 의문제
  • bfd, dfs, 구현을 잘 융합해서 풀어야!
  • 문제를 깊게 읽는 것이 중요!
  • 문제 긴 경우, 조건을 빼먹지 않고 찬찬히 살펴볼것!
  • 보통 30-40분 안에 풀면 좋음!
  • 파이썬으로는 시간복잡도가 조금 촉박한 문제이긴 함!
  • 선형대수학, 기하학이 필요
from copy import deepcopy

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


# 선형대수학, 기하학 필요한 부분! 외우세요!
def rotate90(B, N):
    NB = deepcopy(B)
    for i in range(N):
        for j in range(N):
            NB[j][N-i-1] = B[i][j]
    return NB


def convert(lst, N):
    new_list = [i for i in lst if i]
    for i in range(1, len(new_list)):
        if new_list[i - 1] == new_list[i]:
            new_list[i - 1] *= 2
            new_list[i] = 0
    new_list = [i for i in new_list if i]
    return new_list + [0] * (N - len(new_list))


def dfs(N, B, count):
    ret = max([max(i) for i in B])
    if count == 0:
        return ret
    for _ in range(4):
        X = [convert(i, N) for i in B]
        if X != B:
            ret = max(ret, dfs(N, X, count-1))
        B = rotate90(B, N)
    return ret


print(dfs(N, Board, 5))

최적화한 쌤's 코드

4. 느낀 점

profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글