[TIL] 백준 2503 - 숫자 야구 ( python )
·
TIL
📌 문제 탐색하기N : 민혁이가 영수에게 질문한 개수strike : 민혁이가 제시한 수와 영수의 수의 같은 자리에서 숫자가 일치하면 스트라이크ball: 민혁이가 제시한 수에 포함된 숫자가 영수의 수에 있지만 위치가 다르면 볼guesses: 민혁이가 질문한 세 자리 수와 영수가 답한 스트라이크 개수를 나타내는 정수와 볼의 개수를 나타내는 정수를 저장하는 배열 영수가 마음속으로 생각한 세 자릿수( 1~9, 서로 다른 숫자 )와 민혁이의 질문( 세 자릿수, 스트라이크, 볼 )을 바탕으로 영수가 생각할 수 있는 후보 숫자의 총 개수를 구하는 것이 핵심입니다. 1 ≤ N ≤ 100가능한 시간복잡도 후보 수의 총 개수1부터 9까지 서로 다른 숫자로 구성된 3자리 수의 경우, 총 9 × 8 × 7 = 504가지 후..
[TIL] 백준 13567 - 로봇 ( python )
·
TIL
📌 문제 탐색하기M : 2차원 배열의 행, 열 값matrix : M * M 2차원 배열n: 명령어 개수 로봇은 (0, 0)에서 시작하며, 처음에 동쪽을 바라봅니다.TURN 명령은 왼쪽(0)과 오른쪽(1)으로 90도 회전을 의미하며, MOVE 명령은 현재 바라보는 방향으로 d만큼 이동합니다.명령어 실행 후 로봇이 matrix 내부나 경계에 있어야 명령어가 유효한지를 구하는 것이 핵심입니다. 1 ≤ M ≤ 1,0001 ≤ n ≤ 1,000가능한 시간복잡도M x M 크기의 배열을 생성하고, 모든 원소를 한 번씩 접근하므로 O(M^2)의 시간이 소요됩니다.n개의 명령어를 순차적으로 처리하며, 각 명령어마다 상수 시간 연산(O(1))을 수행하므로 전체적으로 O(n)의 시간이 소요됩니다.전체 시간 복잡도:두 부분..
[TIL] 백준 2096 - 내려가기 ( python )
·
TIL
📌 문제 탐색하기N : N개의 줄matrix : N x 3 2차원 배열 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나이며 N개의 행에 걸쳐 세 개의 숫자가 주어집니다.각 행에서 한 숫자를 선택하며 아래로 내려가면서 숫자들의 합을 구하는 게임입니다.목표는 제시된 이동 규칙에 따라 내려오면서 얻을 수 있는 최대 점수와 최소 점수를 구하는 것입니다.가능한 시간복잡도조합각 행마다 최악의 경우 약 3가지의 선택지가 있을 수 있습니다.첫 번째 열이나 마지막 열에서는 선택지가 2가지이지만, 최악의 경우(즉, 항상 3가지 선택이 가능한 경우)를 가정합니다.첫 행에서 3가지 선택이 있고, 그 다음부터는 각 행마다 최대 3가지 선택이 있습니다.전체 경로의 개수는 3 × 3^(N-1)입니다.O(3^..
[TIL] 백준 1149 - RGB거리 ( python )
·
TIL
📌 문제 탐색하기집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 합니다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보는 것이 핵심입니다.1번 집의 색은 2번 집의 색과 같지 않아야 한다.N번 집의 색은 N-1번 집의 색과 같지 않아야 한다.i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다.가능한 시간복잡도조합모든 가능한 비용의 조합을 다 시도해야 하므로 가능한 조합은 3 * 2^(N-1)개로 매우 비효율적입니다.DP ( 동적계획법 )연속한 두 집은 같은 색을 칠할 수 없습니다.따라서, i번째 집을 빨간색으로 칠할 때, 이전 (i-1)번째 집은 초록 또는 파랑이어야 합니다.dp[i]..
[TIL] 백준 14430 - 자원 캐기 ( python )
·
TIL
📌 문제 탐색하기N : 세로길이M: 가로길이(1, 1) : 시작점(N, M) : 도착점오른쪽 또는 아래쪽 : 이동 가능한 방향1 : 자원 있음0 : 빈 땅 오른쪽과 아래쪽만 이동이 가능하며,경로 상에서 자원이 있는 칸의 합이 최대가 되도록 경로를 선택해야 하는 것이 핵심입니다.1≤N≤3001≤M≤300가능한 시간복잡도최대 300×300 = 90,000번의 연산으로 2초 안에 연산 가능합니다.알고리즘 선택오른쪽 또는 아래쪽으로만 이동 가능하므로, 각 칸에 도달하는 경로는 단순하게 결정되며, 누적 최대값을 저장하는 DP 방식으로 접근해 보겠습니다.📌 코드 설계하기문제의 Input을 받습니다.DP 테이블 초기화: 크기가 N×M인 2차원 배열 dp를 생성합니다.dp[0][0]에는 시작 위치의 값 matrix..
[TIL] 백준 9095 - 1, 2, 3 더하기 ( python )
·
TIL
📌 문제 탐색하기T : 테스트 케이스n : 1, 2, 3의 합으로 나타내는 방법의 수 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 것이 핵심입니다.1 ≤ n 가능한 시간복잡도완전 탐색(재귀) 방식으로 문제 해결 n을 1, 2, 3의 합으로 나타내는 모든 경우를 탐색하는 방식입니다.f(n) = f(n-1) + f(n-2) + f(n-3)로 정의되므로, 재귀 호출이 3개의 가지(branches) 로 분기됩니다.따라서 O(3^n) 의 시간 복잡도를 가집니다.문제에서 n 의 연산이 발생합니다.1초 이내에 처리할 수 있는 수준이므로 이론적으로 가능하지만, n이 더 커지면 비효율적입니다.동적 계획법(DP) 방식으로 문제 해결중복되는 부분 문제를 메모이제이션하여 계산을 줄이는 방식입니다.최대 n=10이므로 ..
[TIL] 백준 10026 - 적록색약 ( python )
·
TIL
📌 문제 탐색하기N : 그리드 행, 열R : 빨강G : 초록B : 파랑 적록색약 : 빨간색과 초록색의 차이 못느낌적록색약이 아닌 사람이 봤을 때의 구역의 수와 적록색약인 사람이 봤을 때의 구역의 수를 구하는 것이 핵심입니다.1≤N≤100가능한 시간복잡도N의 최댓값은 100이므로 전체 나무판의 수는 100 * 100 = 10,000개입니다.외부 이중 반복문과 BFS 모두 O(N^2) 시간복잡도를 가지므로, 최악의 경우에도 약 10,000번의 기본 연산을 수행합니다.1초에 약 100,000,000번의 연산을 수행할 수 있으므로 시간 안에 탐색을 완료할 수 있습니다.알고리즘 선택 BFS 알고리즘으로 접근해 보겠습니다.📌 코드 설계하기문제의 Input을 받습니다.matrix의 원본 데이터를 복사하여 blin..
[TIL] 백준 27737 - 버섯 농장 ( python )
·
TIL
📌 문제 탐색하기N : 나무판의 행, 열M : 버섯포자 개수K : 한개의 버섯포자에서 최대로 버섯이 자랄 수 있는 개수버섯 포자를 하나라도 사용하고 버섯이 자랄 수 있는 모든 칸에 버섯이 전부 자랐을 때 농사가 가능하다고 정의하며,최소 개수로 버섯 포자를 심는 것이 핵심입니다.1≤N≤100 0≤M≤1000000 1≤K≤10^8 N,M,K는 모두 정수이다.가능한 시간복잡도N의 최댓값은 100이므로 전체 나무판의 수는 100 * 100 = 10,000개입니다.외부 이중 반복문과 BFS 모두 O(N^2) 시간복잡도를 가지므로, 최악의 경우에도 약 10,000번의 기본 연산을 수행합니다.1초에 약 100,000,000번의 연산을 수행할 수 있으므로 시간 안에 탐색을 완료할 수 있습니다.알고리즘 선택시작 노드를..