XYZ 문자열DP단계가 4이상일 때 문자열이 만들어지는 규칙 ➡️ 3번째 전 문자열 + 2번째 전 문자열1번 문제 \- 문자열의 길이를 담는 dp 배열 생성dp\[i] = dp\[i-3] + dp\[i-2]2번 문제 \- 각 문자의 개수를 담는 cnt 배열 생성0
두 용액투포인터배열 오름차순 정렬초기 포인터로 배열의 양 끝점 가리키고, 초기값(answer)을 두 지점의 합으로 설정두 값 더해주며 절댓값이 answer보다 작으면 갱신두 값의 합이 음수이면 start+1두 값의 합이 양수이면 end-1시간복잡도: O(NlogN)
양과 늑대DFS아래 두 가지 조건만 확인해주면서 DFS 진행하면 됨양의 개수 > 늑대의 개수부모 노드 방문 & 자식 노드 미방문시간복잡도: O(2^N)
N-Queen백트래킹1차원 배열로도 구현 가능row\[x]=i는 (x행, i열)에 퀸이 놓여있다는 뜻유망성 판단은 현재 행인 x전까지 놓여있는 퀸 확인1) 같은 열에 놓여있는지 확인2) 대각선에 놓여있는지 확인: 행 차이==열 차이행이 n에 도달했을때 답 추가시간복잡도
벌집수학아래와 같은 규칙으로 테두리가 생김 \- 끝 숫자를 보면 6, 12, 18, 24..씩 6의 배수만큼 차이가 증가시간복잡도: $O(\\sqrt N)$
막대기수학문제해석: 64, 32, 16, 8, 4, 2, 1 길이의 막대 몇 개를 가지고 만들 수 있는지현재 막대(n)이 x보다 크다면 반으로 나누기그렇지 않다면 x에서 n 빼주고 갯수 증가시간복잡도: O(1)
체스판 다시 칠하기브루트포스8\*8 크기의 체스판 슬라이싱시작점 범위는 행(0, n-7), 열(0, m-7)체스판 범위는 (현재행, 현재행+8), (현재열, 현재열+8)최소 변경 횟수 구하기두 패턴 만들기 -> (행+열)==짝수(W) 일때와 (행+열)==홀수(B) 일
테트리스 게임구현브루트포스테트리스를 뒤집을 수 없고 회전만 가능함에 주의❗️가능한 테트리스 모양 모두 shapes에 저장격자판 모두 탐색하며 테트리스 모양 놓기테트리스 셀 중 하나라도 격자판 범위 벗어나면 pass격자판 범위 내라면 값 계산후 최댓값 갱신Python시간
온풍기 안녕!구현시뮬레이션벽을 set에 양방향으로 저장하기바깥쪽 온도 1씩 감소할때 모서리 중복되지 않도록 주의하기격자 정보 받을 때 행, 열 인덱스 -1씩, 정보칸은 정보 따로 저장 후 0으로 변환히터 순회하며 온도 상승1) queue를 이용해서 한 라인 진행될때마다
동전 2DPdp 배열을 k+1만큼 생성 후 모두 최댓값으로 초기화dp0=0으로 초기화가치를 1부터 탐색하며 이전 가치에서 동전을 하나 추가했을때 최솟값 찾아서 갱신Python시간복잡도: O(NK)
사과나무누적합2차원 배열 범위를 (N+1)(N+1)로 늘리고 첫 행, 첫 열을 모두 0으로 채우기2차원 누적합 생성2차원 배열을 순회하며 시작점을 설정하고, K를 1부터 N까지 늘리면서 누적합 계산최댓값으로 정답 갱신Python시간복잡도: O(N^3)
틱택토dfs백트래킹완탐dfs/백트래킹으로 가능한 말의 조합 모두 생성turn을 인자로 줘서 홀수면 X, 짝수면 O로 놓기turn이 10이면 더 이상 놓을 수 없으므로 종료한 말로 3칸 연결되면 (2) 종료3칸 연결 확인가로 확인전치 행렬로 변환해서 세로 확인두 대각선
최소비용 구하기 2다익스트라노드에 도착하기 직전 노드를 저장하는 prev 배열 생성다익스트라 진행하면서 prev\[현재노드] = 이전노드 저장다익스트라 진행 완료 후, 도착지점부터 출발지점까지 역추적하며 경로 생성Python
구간 합 구하기 5누적합2차원 누적합 문제arr와 누적합인 prefix_sum 2차원 배열의 첫 행, 첫 열을 모두 0으로 패딩을 넣어주는 것이 중요❗️누적합 생성 점화식prefix_sum\[i]\[j] = arr\[i]\[j] + prefix_sum\[i-1]\[j]
방의 개수그래프고려해야 할 문제 1\. 같은 점을 다른 경로를 통해 돌아오는 것이 아니라 그냥 같은 길을 왕복해서 돌아올 수 있음 \-> 간선을 따로 저장 2\. 대각선이 교차할 때 \-> 간선의 길이를 0.5로 설정하여 한 방향으로 두 번 나아가기
메이즈 러너구현참가자 이동상하좌우 순으로 이동했을 때 출구와의 맨해튼 거리가 짧아질 때에만 이동 수행출구와의 맨해튼 거리가 가장 짧은 참가자들 후보로 저장각 참가자들 순회하며 정사각형 생성size, row, col 순으로 3중 for문 돌면서 정사각형 생성(인덱스 조정
포탑 부수기구현bfs공격자 선정배열 내 최솟값공격자가 될 수 있는 포탑들 후보 리스트candidate에 추가candidate를 행과 열의 합, 열 순으로 오름차순 정렬공격 기록 뒤에서부터 돌며 만약 candidate 내에 있으면 공격자로 지정없으면 공격자는 candid
왕실의 기사 대결구현bfs명령 하나씩 수행하며 밀릴 예정인 기사들 반환현재 기사와 연결된 기사들 큐에 넣고 연쇄적으로 판단(bfs)어느 과정 중에라도 벽을 만난다면 빈 값으로 반환밀릴 예정인 기사들의 좌표 업데이트기사 배열에서 기존 자리 삭제 (0)이동한 자리 인덱스로
고대 문명 유적 탐사구현dfs탐색 진행1)3X3 슬라이싱 후 90, 180, 270으로 회전총 27개의 경우의 수 발생2) 각 경우에서 유물가치가 최대가 되는 배열 구하기연결된 조각의 개수(dfs 또는 bfs로) 구해서 모두 더하기이때 사라진 조각들의 좌표 모두 저장하
미지의 공간 탈출구현bfs시간의 벽 전개하기시간의 벽에서 면 간의 이동 구현하기 (인덱스 조정이 까다로움..)시간의 벽에서 bfs 수행이상현상 이동도 동시 수행 \- 지나온 turn을 set으로 관리하여 turn마다 단 한번만 실행되도록 해야 함바닥면에서 시간의 벽과