python 20055 컨베이어 벨트 위의 로봇
·
코딩테스트/백준
📌 문제 정보문제 번호: 20055문제: https://www.acmicpc.net/problem/20055난이도: 골드 5🧩 문제 요약N칸의 컨베이어 벨트가 원형으로 이어져 있음각 칸에는 내구도가 있고, 로봇은 벨트 위에만 올라갈 수 있음회전, 로봇 이동, 로봇 올리기 등의 작업을 단계별로 수행내구도가 0인 칸의 개수가 K 이상이면 종료몇 단계에서 종료되는지 구하는 문제🧪 예제 입력 / 출력예제 입력:3 21 2 1 2 1 2 예제 출력:2 설명:컨베이어 벨트 길이 N=3이므로 전체 칸은 2N=6칸내구도 0인 칸이 2개 이상 되면 종료위 과정을 2단계 반복 후 종료되므로 출력은 2💡 접근 방식컨베이어 벨트를 시계 방향으로 한 칸 회전시킴로봇도 함께 이동하며 내리는 위치(N-1)에서 내림앞 칸이 ..
python 1927 최소 힙
·
코딩테스트/백준
📌 문제 정보문제 번호: 1927문제: https://www.acmicpc.net/problem/1927난이도: 실버 2🧩 문제 요약자연수 또는 0이 주어질 때, 0이면 지금까지 입력된 자연수 중 가장 작은 수를 출력하고 제거함.자연수가 주어지면 해당 값을 자료구조에 추가함.자료구조는 최소 힙을 이용해야 함.🧪 예제 입력 / 출력입력 예시901234567812000032  출력 예시 012123456780 설명첫 번째 입력 0 → 비어있으므로 0 출력12345678, 1, 2 추가됨다음 0 → 1 출력다음 0 → 2 출력다음 0 → 12345678 출력다음 0 → 힙 비어 있으므로 0 출력💡 접근 방식우선순위가 가장 낮은(작은) 수를 빠르게 꺼내야 함 → 우선순위 큐(힙) 사용파이썬에서는 heap..
python 11003 최솟값 찾기
·
코딩테스트/백준
📌 문제 정보문제 번호: 11003문제: https://www.acmicpc.net/problem/11003난이도: 플래티넘5🧩 문제 요약수열이 주어졌을 때, 각 위치에서 **자기 앞 L개(포함)**를 보면서 최솟값을 구하는 문제.수열 길이 N (1 ≤ N ≤ 5,000,000)윈도우 크기 L (1 ≤ L ≤ N)각 위치 i에 대해 i-L+1부터 i까지 중 최솟값을 출력시간 제한이 매우 빡빡하므로 O(N log N)도 시간 초과 발생 가능→ O(N) 알고리즘 필요🧪 예제 입력 / 출력 입력 12 3 1 5 2 3 6 2 3 7 3 5 2 6  출력1 1 1 2 2 2 2 2 3 3 2 2 설명:슬라이딩 윈도우 범위 내 최솟값을 출력해야 함앞에서 3개씩 묶어서 최솟값을 빠르게 찾아야 함💡 접근 방식..
python 12891 DNA 비밀번호
·
코딩테스트/백준
📌 문제 정보문제 번호: 12891문제: https://www.acmicpc.net/problem/12891난이도: 실버2🧩 문제 요약DNA 문자열이 주어졌을 때, 특정 조건을 만족하는 부분 문자열(슬라이딩 윈도우)의 개수를 구하는 문제임.문자열 S와 부분 문자열의 길이 P가 주어짐A, C, G, T 각각에 대해 필요한 최소 개수가 주어짐부분 문자열 중 각 문자가 해당 개수 이상 포함되면 "유효한 비밀번호"로 간주함유효한 비밀번호의 개수를 출력해야 함🧪 예제 입력 / 출력 입력 4 2 GATA 1 0 0 1  출력 2  설명:문자열 GATA에서 길이 2의 부분 문자열은 GA, AT, TA 총 3개 있음.GA → A=1, T=0 → 조건 만족 → ✅AT → A=1, T=1 → 조건 만족 → ✅TA →..
python 1253 좋다
·
코딩테스트/백준
📌 문제 정보문제 번호: 1253문제: https://www.acmicpc.net/problem/1253난이도: 골드 4🧩 문제 요약N개의 수가 주어졌을 때, 이 수들 중 다른 두 수의 합으로 표현될 수 있는 수의 개수를 구하는 문제.이런 수를 "좋다"라고 부름.🧪 예제 입력 / 출력예제 입력10 1 2 3 4 5 6 7 8 9 10  예제 출력8  설명:좋은 수는 다음과 같음3 = 1+24 = 1+35 = 1+4 or 2+3...10 = 1+9 or 2+8 ... 등좋은 수는 총 8개이며, 1과 2는 좋은 수가 아님💡 접근 방식각 수가 좋은 수인지 하나씩 확인하면서,그 수를 제외한 나머지 수들 중 두 수의 합이 해당 수와 같은지를 확인함.이때, 정렬 후 투 포인터 방식으로 효율적으로 합을 탐색함..
python 1940 주몽
·
코딩테스트/백준
📌 문제 정보문제 번호: 1940문제: https://www.acmicpc.net/problem/1940난이도: 실버 4🧩 문제 요약N개의 재료가 주어지고, 각 재료마다 고유한 번호(= 정수)가 있음.M이라는 값이 주어졌을 때, 두 개의 서로 다른 재료 번호를 더해서 M이 되는 쌍의 개수를 구하는 문제.🧪 예제 입력 / 출력예제 입력6 9 2 7 4 1 5 3  예제 출력2  설명:2 + 7 = 94 + 5 = 9=> 총 2가지 쌍💡 접근 방식정렬된 리스트에서 두 수의 합이 특정 값을 만드는 쌍을 찾는 문제 → 투 포인터 알고리즘이 적절함.리스트를 정렬한 뒤, 양쪽 끝에서 시작해서 합을 비교하며 포인터 이동.⚙️ 알고리즘 설명입력값 N, M과 재료 리스트 입력리스트를 정렬함 (nums.sort()..
python 2018 수들의 합 5
·
코딩테스트/백준
📌 문제 정보문제 번호: 2018문제: https://www.acmicpc.net/problem/2018난이도: 실버 5🧩 문제 요약자연수 N이 주어졌을 때, 연속된 자연수들의 합으로 N을 나타낼 수 있는 경우의 수를 구하는 문제.(단, 수는 하나 이상 이어져야 함)🧪 예제 입력 / 출력예제 입력 15  예제 출력 4  설명: 15를 만들 수 있는 경우의 수는 다음과 같음1 + 2 + 3 + 4 + 54 + 5 + 67 + 815 (자기 자신)총 4가지 경우💡 접근 방식처음엔 완전탐색이 떠오르지만, 시간 초과 방지를 위해 투 포인터 방식으로 접근하는 것이 적절함.자연수의 연속된 합이라는 성질을 이용하면, 1부터 시작해서 수를 더해가며 조건을 만족하는지 확인 가능함.⚙️ 알고리즘 설명두 개의 포인터..
python 10986 나머지 합 구하기
·
코딩테스트/백준
📌 문제 정보문제 번호: 10986문제: https://www.acmicpc.net/problem/10986난이도: 골드 3🧩 문제 요약정수로 이루어진 수열이 주어졌을 때, 부분합의 나머지가 M으로 나누어떨어지는 경우의 수를 구하는 문제임.부분합이란 i~j 구간의 합을 의미하며, 이 구간의 합이 M으로 나누어떨어질 때를 모두 세야 함.🧪 예제 입력 / 출력입력: 5 3 1 2 3 1 2 출력: 7 누적합 기준으로 구간을 잡을 때, 나머지가 0이 되는 경우가 7가지 존재함.💡 접근 방식단순히 모든 구간을 탐색하면 시간 초과 → 누적합 + 나머지 개념 활용누적합을 계산한 뒤, 같은 나머지를 가지는 구간의 조합 수를 이용하여 계산함나머지가 같다는 것은 두 구간 사이의 차이가 M으로 나누어떨어진다는 의미..