포탑 부수기 [삼성 기출]
1. 문제 접근 방법 - 문제의 정답은 맞추었다 - 보완할 부분은 (1) 효율성 부분 - path를 copy.deepcopy하는 식으로 접근했는데, 이 부분에서 효율성이 많이 깎였다 -> 그냥 path에다가 새로운 리스트 [[nx, ny]]를 + 하면 추가가 된다. -> 이렇게 해야 한다 (2) 코드 간결화 부분 - towers라는 리스트를 만들어서 전역으로 관리했었는데, 이렇게 하니까 중간중간 정보가 바뀔때마다, 업데이트를 하는 것이 필요했다. -> 굳이 x, y, 공격력, 가장 최근 시간 정보를 리스트로 다 들고 있을 필요가 없다 -> x,y, 공격력은 board 저장되므로, board에 저장하고, 가장 최근 시간 정보는 times라는 2차원 board를 만들어서 저장한다. -> 이렇게 하면 정보의 ..
토마토 [백준 7569]
1. 문제 접근 방법 - 토마토(백준 7576) 하고 비슷한 문제이다. 차이점은 토마토가 3차원 리스트에 들어 있다는 차이점이 있다 3차원 리스트에서 6가지 방향으로 탐색하는 것만 잘 고려하면 되는 문제라고 할 수 있다. 2. 코드 from collections import deque M, N, H = map(int, input().split()) board = [] count = [[[0 for col in range(M)] for row in range(N)] for depth in range(H)] q = deque() ## 3차원 탐색을 위한 dx,dy,dz를 정해준다. dx = [-1, 1, 0, 0, 0, 0] dy = [0, 0, 0, 0, 1, -1] dz = [0, 0, -1, 1, 0,..
코드트리 빵 [삼성 기출]
1. 문제 접근 방법 - 문제를 처음 잘못 접근했던 문제이다. 편의점으로 가는 최단 거리를, 매 시간마다 새로 구해서 업데이트 해야 한다. 이 때, 중간에 변경되는 사항을 고려해줘야 한다 변경되는 사항이란, 새로 업데이트되는 편의점, 베이스캠프를 의미한다. 이 점을 고려해서 지나가지 못하도록 해야 한다. 해설 코드를 참고해서 올린다. 2. 코드 from collections import deque n, m = map(int, input().split()) dx = [-1, 0, 0, 1] dy = [0, -1, 1, 0] def isInside(x, y): if 0
나무 박멸 [삼성 기출]
1. 문제 접근 방법 - 이 문제의 경우는, 더 이상 박멸할 나무가 없을 때의 엣지 케이스를 고려하는 것이 매우 중요하다. -> 항상 여러 엣지 케이스를 고안해서, 그것을 반드시 제출하기 전에 테스트하는 습관을 가져야 한다 -> 변수들을 보면서, 여기서 어떤 케이스가 발생할 수 있을지 미리미리 사고할 수 있어야 한다. 2. 코드 N, M, K, C = map(int, input().split()) board = [] dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] dx2 = [-1, -1, 1, 1] dy2 = [-1, 1, -1, 1] for i in range(N): row = list(map(int, input().split())) board.append(row) totalKil..
꼬리잡기 놀이 [삼성 기출]
1. 문제 접근 방법 - 이 문제의 경우는, 한 번 테스트 케이스를 틀렸다가, 수정해서 맞았다. -> 꼬리잡기를 할 때, 1과 3이 맞닿아 있는 경우가 있다. -> 이러한 경우, 내가 작성한 BFS로는 오류가 발생했다. -> 엣지 케이스를 고안해낼 수 있는 능력은 매우 중요하다. 여기서 성패가 갈린다. -> 특히, 중요한 것은 어느 부분에서 엣지 케이스가 발생할 수 있는지 사고하는 능력이다. -> 문제에서 포인트가 되는 부분이 있다. 그 포인트가 되는 부분에서 어떤 케이스가 존재할 수 있는지 사고하는 연습을 해야 한다. 2. 코드 from collections import deque N, M, K = map(int, input().split()) dx = [-1, 1, 0, 0] dy = [0, 0, -..
싸움땅 [삼성 기출]
1. 문제 접근 방법 - 구현 문제이다. 디테일한 요구 사항을 정확하고 제대로 구현하는 것이 중요한 문제이다. 총의 정보는 gunsBoard라는 3차원 배열을 만들어서, 관리했고, 중간 중간에 정보가 바뀔때마다, sort를 해줬다. - 메소드 하나하나 디테일하게 주석을 달아서 정리해봐야겠다. - 시간 복잡도를 반드시 꼼꼼하게 계산하도록 하자. 2. 코드 N, M, K = map(int, input().split()) gunsBoard = [[[] for _ in range(N)] for _ in range(N)] dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] board = [] players = [] ## points를 기록하기 위한 배열 points = [0]*M ## 처음에 입력..
이분 그래프 [백준 1707]
1. 문제 접근 방법 - 이분 그래프가 가능한지 묻는 문제이다. 이분 그래프가 가능한지 판단하기 위해서, 방문하는 점마다 1, 2를 번갈아가면서 컬러링을 하고, 만약에 이웃하는데 같은 색깔을 컬러링해야 한다면, 이분 그래프를 만드는 것이 불가능하므로, "NO"가 된다고 해주면 된다. 2. 코드 from collections import deque K = int(input()) def bfs(start, edge, visited): q = deque() ## 현재 점의 색깔을 1으로 하고, ## 다음 점을 탐색한다. q.append((start, 1)) ## 방문한 점에는 색깔을 칠해준다. visited[start] = 1 while q: num, color = q.popleft() for next in ..
마법사 상어와 블리자드 [삼성 기출]
1. 문제 접근 방법 - 구현 문제이다. 단, 처음에 입력된 board를 배열에 옮겨 담으면, 그 이후에는 board를 신경쓰지 않고, 배열로만 문제를 풀이할 수 있다. -> 이 문제 같은 경우는 구슬이 다 폭발되었을 때, 엣지 케이스를 잘 고려하는 것이 중요하다. -> 항상 여러 엣지 케이스에 대해 잘 고려하고, 그것을 제출 전에 미리 테스트해보는 습관을 가져야겠다. 2. 코드 import copy N, M = map(int, input().split()) board = [] dx = [0, 1, 0, -1] dy = [-1, 0, 1, 0] for i in range(N): row = list(map(int, input().split())) board.append(row) arr = [] arr.ap..