본문 바로가기

PS

(224)
N-queen [백준 9663] 1. 문제 접근 방법 - DFS를 기본적으로 활용하는 문제이다. -> DFS를 활용하되, 각각의 행마다 열을 하나씩 선택해주면 된다. -> 이 때, 열을 중복해서 선택하지 않고, 또한, 기존에 선택한 점들과 대각선에 존재하지 않도록 하면서 선택하면 되는 문제이다. -> 이렇게 해서 row가 N+1에 도달했을 때, 정답의 개수를 1 증가시키면 되는 문제이다. 2. 코드 N = int(input()) ans = 0 def check(row, col, checked, N): for x, y in checked: if abs(x-row) == abs(y-col): return False return True def dfs(row, cols, checked, N): global ans if row == N+1: ..
연속합 [백준 1912] 1. 문제 접근 방법 - 누적합이 음수인 경우, 현재 위치의 값이 누적합보다 클 경우, 대체해준다는 것이 핵심 아이디어인 문제이다. - maxSum과 sum을 구분해서 선언하고, 각각을 계속해서 반복적으로 업데이트 해야 한다. n = int(input()) A = list(map(int, input().split())) maxSum = A[0] sum = A[0] for i in range(1, n): sum = max(sum+A[i], A[i]) maxSum = max(maxSum, sum) print(maxSum)
마법사 상어와 파이어 스톰 [삼성 기출] 1. 문제 접근 방법 - 격자판을 나누어서, 격자판을 회전시킨 후에, 얼음의 양을 줄이는 것을 반복하는 문제이다. 이 때 중요한 것은 격자판을 정확하게 회전시키는 것이다. -> rotate 함수에 주목하자 -> rotate 함수에서 4차원 for문을 활용해서 회전을 시켰다. 2. 내 코드 from collections import deque import copy N, Q = map(int, input().split()) board = [] for i in range(2**N): row = list(map(int, input().split())) board.append(row) magics = list(map(int, input().split())) dx = [-1, 0, 1, 0] dy = [0, 1, ..
탈주범 검거 [SWEA 모의 역량 테스트] 1. 문제 접근 방법 - 이 문제 같은 경우는 bfs를 통해 board를 탐색하되, board에 있는 파이프의 종류에 따라서, 현재 지점으로부터 다음 지점이 방문 가능한지를 판단하는 것이 중요한 문제이다. -> 이 문제에서 중요한 포인트는, 현재 지점에서 다음 지점으로 방문가능한지 판단할 때, 현재 지점의 파이프 모양과 다음 지점의 파이프 모양을 같이 고려해야 한다는 점이다. -> 이 때 파이썬의 배열의 in을 잘 활용해주면 좋다. 2. 코드 from collections import deque T = int(input()) dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] def findAble(type): if type == 1: return [0, 1, 2, 3] elif type..
등산로 조성 [SWEA 모의 SW 역량 테스트] // 1시간 반 소요 1. 문제 접근 방법 - SWEA에서 문제를 풀 때, 전체 다 지우고, 내가 사용할 것들을 넣으면 된다 -> 또한, for 문 같은 경우는 있는 그대로 사용하려면, 그 양식에 맞게 사용해야 한다 - 문제를 DFS로 접근했다 -> DFS로 접근할 때, 테스트 케이스를 잘 고려해야 한다 -> 특히, 중요한 것이 최대 K만큼 팔 수 있다는 것을 어떻게 반영할지이다. -> 최대 K만큼 팔 수 있고, K-1, K-2... 도 팔 수 있으나, 최소한, 현재 칸보다는 하나 작게 만들때까지는 파야 한다. 왜냐면 팠는데, 현재 칸과 같거나 현재 칸보다 높다면, 이동이 불가능하기 때문이다. 이 점을 잘 고려해야 한다 - if K>=gap이라는 조건도 중요하다. 왜냐하면 이 조건이 있어야만, 다음 방문..
소수 경로 [백준 1963] 1. 문제 접근 방법 - DFS로 접근해서 문제를 해결했다 -> 한 번 접근했던 곳을 중복 접근할 때는, 방문횟수가 더 적은 경우에만 접근하도록 하는 것이 중요하다 -> 또한, 숫자를 바꿀때는 최대한 목표와 가까운 것부터 바꾸게 하는 것이 중요하다 -> 왜냐면 그래야 가장 최소 횟수로 접근할 확률이 높아지기 때문이다. -> 또한, 최소 횟수를 넘은 케이스에 대해서 pruning해주는 것도 중요하다. - Memoization에 대해서 좀 더 제대로 할 필요가 있다 -> 즉, 난이도가 높은 문제일수록 최적화가 중요한 문제로 대두된다는 점을 기억해야 한다 -> DP에 대해서 좀 더 제대로 공부할 필요가 있다. - 또한 소수를 구하는 로직에 대해서도 익숙하게 구현해야 한다 -> sqrt를 사용해서 구하는 것에 ..
벽 부수고 이동하기 [백준 2206] 1. 문제 접근 방법 - 이 문제는 문제를 풀다가 막혀서 구글링해서 참고했다 구글링을 통해서, visited 배열을 3차원 배열로 선언해서, 벽을 깬 케이스와 벽을 깨지 않은 케이스를 구분해서 접근할 수 있음을 알게 되었다. 이러한 접근법을 학습하게 되었고, 다른 문제를 푸는데 응용해봐야겠다. from collections import deque N, M = map(int, input().split()) board = [] visited = [[[0]*2 for _ in range(M)] for _ in range(N)] dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] for i in range(N): row = input() tmp = [] for j in range(M): tmp...
안전 영역 [백준 2468] 1. 문제 접근 방법 - BFS, DFS 중에서 파이썬에서는 왠만하면 BFS를 쓰도록 하자 - 이 문제는 visited 배열의 선언이 필요한데, 이 배열을 for문 안에 쓰면 메모리 초과가 발생한다 -> 전역적으로 선언해서 재활용하도록 하자 - 아예 물에 안 잠기는 경우, 즉, maxHeight가 0인 경우가 존재함을 알아야 한다 2. 코드 from collections import deque N = int(input()) board = [] visited = [[False]*N for _ in range(N)] dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] for i in range(N): row = list(map(int, input().split())) board.append(..
스타트 택시 [삼성 기출] 1. 접근 방법 - 어떤 문제던지 예외 케이스를 고려할 수 있는 역량이 매우 중요하다 -> 예외 케이스를 고려할 수 있는 역량이 곧 실력이다. - 이 문제에는 두 가지 예외 상황이 있다 (1) 택시가 승객으로 이동할 수 '없는' 경우 -> 칸과 '벽'이 있기 때문에, 택시가 승객으로 이동할 수 '없는' 경우가 발생한다 (2) 승객을 태우고 목적지로 이동할 수 '없는'경우 -> 승객을 태우고 목적지로 이동할 때도, 마찬가지로 '벽'으로 인해서 이동할 수 '없는' 경우가 발생한다. - 이러한 예외 케이스들을 잘 고려해줘야 한다 -> 특히, 파이썬에서 TypedError가 나는 상황을 처음 경험했는데, 이는 BFS에서 return이 없어서 발생한 것이었다. - getTaxiDistance는 승객의 출발지점까지..
청소년 상어 [삼성 기출] 1.접근 방법 - 항상 최적화와 효율적 접근이 중요하다는 사실을 기억하자 -> 최적화와 효율적 접근이 성패를 가른다 - 자료구조는 적게 쓸 수록 좋다 -> 좌표는 따로 배열에 저장하지 않고, Map에서 가져다 쓰면 된다. -> 그리고 가져다 쓸 때, 그 좌표를 반환시키면 된다. - 기본적으로 DFS로 접근하는 문제이다. -> 그 점을 잘 기억하자 - beforeBoard를 copy해놓는다는 아이디어가 중요하다 -> copy해 놓아야 나중에 복원할 수 있다 -> 방문한 곳의 숫자는 -1로 처리한다 - 위치를 단순히 교환하는 것은 파이썬 문법의 장점이다 -> moveFish에서 상어의 위치일 때는 이동이 불가능하다는 점을 고려해야 한다. - shark의 Move도 하나의 for문에서 처리할 수 있고, 거기서..