[백준] 17266번: 어두운 굴다리 (이분탐색, 파이썬)
·
코딩테스트/BOJ
📌 문제 탐색하기 양 옆으로 가로등 높이 H만큼 비추는 가로등 M개가 있다고 했을때, 길이 N의 굴다리를 전부 밝힐 수 있는 최소 가로등의 높이를 구하는 문제이다. 🔎  시간 복잡도각 가로등 간의 간격을 순회해야하므로 M+1번 비교를 해야한다. 간격을 순회하면서 해당 높이를 탐색하면 되므로,  시간 제한안에 풀 수 있다.🔎 접근 방법 및 알고리즘가로등의 높이가 클수록 더 넓은 범위를 비추고, 작을수록 적은 범위를 비춘다.가로등의 높이가 가능한 범위는 0 ~ N (100,000)이다📌 코드 설계하기1️⃣ X의 리스트 이웃한 두 숫자 간 넓이를 순회하자. 예를 들면 i, i + 1번째 x가 각각 3과 10이라고 한다면, 가로등의 최소 높이는  반올림한 값인 round((10 - 3) / 2)가 될 것..
[백준] 2615번: 오목 (구현, 파이썬)
·
코딩테스트
📌 문제 탐색하기 입력으로 주어진 오목 판의 상태를 확인하고, 검은색(1)이 이겼을 경우에는 1을 출력하고, 흰색(2)이 이겼을 경우에는 2를 출력한다. 아직 무승부라면 0을 출력한다. 또한 1, 2를 출력한다면, 가장 왼쪽에 있는 바둑알의 좌표를 출력해야한다. 🔎 문제 조건검은 바둑알 또는 흰색 바둑알이 5개 놓여 오목일때, 해당 색상을 출력하고, 상단 좌표를 출력해야한다.가장 왼쪽에 있는 좌표를 출력해야하므로 ↙ 방향으로 오목이 생길때는 마지막으로 탐색한 좌표를 출력해야한다. 🔎  시간 복잡도19 x 19자리에서 4방향(↙,↓,↘,→ )에 대해 탐색을 진행하므로 시간 제한 1초 안에 해결할 수 있다. 🔎 접근 방법 및 알고리즘 ↙, ↓, ↘, → 순서대로 DFS를 진행했다.여섯 알 이상이 놓인..
[백준] 2503번: 숫자 야구 (구현, 파이썬)
·
코딩테스트/BOJ
📌 문제 탐색하기 영수가 생각하는 숫자의 후보 갯수를 구하는 문제이다. 각 자리에 해당하는 숫자 비교와 1~9의 숫자들 중 숫자를 소거해가며 후보 수를 구할 수 있다. 하나하나 비교해야하므로 구현을 통해 풀 수 있다. 🔎 문제 조건같은 숫자, 같은 자리면 Strike 1점을 얻을 수 있고, 같은 숫자, 다른 자리면 Ball 1점을 얻을 수 있다. Strike 3점이면 게임은 끝난다. 🔎  시간 복잡도N의 범위 ( 1 ≤ n ≤ 100 )제한 시간: 1초 -> 약 1억번의 연산이 가능하다.100개의 숫자 중 2개를 택해 서로 비교하는 조합의 수는 4950이므로 제한 시간 안에 탐색을 끝낼 수 있다. \스트라이크(S), 볼(B)을 기준으로 정렬하는 데 대략 O(100log100) = 약 664이다. ?..
[백준] 13567번: 로봇 (구현, 파이썬)
·
코딩테스트/BOJ
📌 문제 조건TURN 0: 왼쪽으로 90도 방향을 바꾼다. TURN 1: 오른쪽으로 90도 방향을 바꾼다. MOVE d: d만큼 현재 방향에서 직진한다.시작 위치는 (0, 0), 초기 방향은 (+1, 0)이다! ▷ 출력: 만약, 정사각형 영역을 벗어난다면 -1을 출력하고, 벗어나지 않는다면 현재의 좌표를 출력한다. 문제의 조건 중에서 칸 안에 정보를 얻는 것이 아니므로 (x, y) 값 자체에서 연산해도 무방하다!📌 구해야 하는 정답   로봇이 (0,0)이 n번의 명령을 수행하며 마지막에 위치하는 좌표를 구해야 한다. 📌 풀이 하기동작 조건은 MOVE와 TURN 2가지이다. 동작 각각에 대한 함수를 정의하여 해도 되지만, 바로바로 위치와 방향이 업데이트 되어야하고, 동작이 간단하므로 함수로 정의하지 ..
[백준] 2096: 내려가기 (DP, 파이썬)
·
코딩테스트/BOJ
📌 문제 조건- 메모리 제한 4MB 📌 구해야 하는 정답   N x 3 칸에 0~9의 숫자가 적혀있다.    첫 줄부터 마지막 줄까지 내려가면서 얻는 최대 점수와 최소 점수를 모두 구해야한다.    위 그림의 조건을 만족하면서 내려가야한다. 📌 풀이 하기1. DP 테이블 정의하기 D = [[0, 0, 0], ... , [0, 0, 0]]로 정의한다면  N X 3크기의 공간을 차지하므로 현재 상태와 이전 상태를 저장하는 리스트만 있어도 충분하다. D[i]는 i번째 줄에서의 최대 점수의 합이다. 최대 값을 구하는 점화식은 다음과 같다. -> dp테이블이 공간을 잡아먹으므로 다른 방법을 사용한다 D[i][0] = max(D[i - 1][0], D[i - 1][1]) + S[i][0]D[i][1] = ma..