문제) 배열에 0이 아닌 정수를 넣는다. 배열중에서 절대값이 가장 작은 수를 출력하고 그 값을 배열에서 제거 한다. 절대값이 가장 작은 값이 여러개일 경우 그중 가장 작은 수를 출력하고 제거한다. 첫 입력으로 연산횟수 n번이 주어진다. 다음 줄부터 0이 아닌 수가 들어오면 그 값을 배열에 삽입하고, 입력 값이 0인 경우 절대값이 가장 작은 수를 출력하고 제거하면 된다. 배열이 비어있는 경우 0을 출력하면 된다. 시간 제한은 1초, 메모리 제한은 256MB 이다. 우선순위 큐로 구현하는 문제이다. 단 절대값 기준이고 절대값이 같다면 음수를 우선해서 출력해야 하기 때문에 이 점만 유의해서 풀면 된다. 더보기#include #include #include using namespace std;stru..
문제) n장의 카드를 카드가 한장 남을 때까지 제일 위에 있는 카드를 버리고 그 다음으로 위에 있던 카드를 맨 아래로 옮기는 작업을 반복한다. 마지막으로 남게 되는 카드를 구하는 프로그램을 만들어보자. 입력은 정수 N이 첫째줄에 주어진다. 시간제한은 2초, 메모리 제한은 128MB 이다. 큐의 선입선출로 쉽게 구현할 수 있는 문제다. 더보기#include #include #include using namespace std;int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; queue que; cin >> n; for (int i = 1; i 1) { que.pop(); que.push(que.fron..
문제) Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중 왼쪽에 있는 수다. 입력한 수열의 오큰수를 공백으로 구분하여 출력하는 프로그램을 만들어보자. 수열의 크기 n, 수열 a1, a2, ... , An개의 수가 공백으로 구분하여 주어진다. 오큰수가 없다면 -1을 출력한다. 시간 제한은 1초, 메모리 제한은 512 MB 이다. 시간이 짧기 때문에 반복문이 아닌 스택으로 문제를 풀어야 한다. 스택에 새로 들어오는 수가 top보다 크다면 해당 수는 오큰수이고, 오큰수가 존재하지 않는 숫자는 -1을 출력해줘야 한다.더보기#include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.ti..
문제) 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 푸시와 팝 연산을 수행해야 하는지 알려주는 프로그램을 만들어보자. 첫줄에 n까지의 수 n이 주어진다. 둘째 줄 부터는 수열을 이루는 수가 순서대로 주어진다. 푸시는 +, 팝은 -, 불가능 할 때는 NO를 출력하면 된다. 시간 제한은 2초, 메모리 제한은 128MB 이다. 스택을 알고 있으면 쉽게 풀 수 있는 문제다. 스택에 넣는 값은 오름차순으로 주어지니 그것만 생각하면 된다. i는 0부터 n까지 현재 수열값이 오름차순한 자연수 값 이상이라면 값이 같아질때까지 푸시 마지막 값을 팝 아니라면 팝한 값이 수열의 수보다 크다면 N..
문제) DNA 문자열은 문자열의 모든 문자가 ACGT인 문자열을 뜻한다. 민호는 임의의 DNA 문자열을 만들어서 문자열의 부분을 비밀번호로 사용하려고 하는데, 등장하는 문자의 개수가 특정 개수 이상이어야지 비밀번호로 사용하려고 한다.민호가 만들 수 있는 비밀번호의 종류의 수를 구할 수 있는 프로그램을 만들어보자. 입력으로 문자열의 길이 S와 부분 문자열의 길이 P, DNA 문자열과 ACGT의 최소 개수가 주어진다. 시간제한은 2초, 메모리 제한은 512MB이다. 슬라이딩 윈도우 방식을 이용해 푸는 문제이다. 예제 2번을 봐보자.4길이의 전체 문자열, 부분 문자열의 길이는 2이니 GA 부터 시작한다. ACGT의 최소 개수는 A, T 각 1개씩, C, G는 0개가 되어야 한다. 문자열 "GA"는..
문제) N개의 수 중 어떤 수가 다른 두 수의 합으로 나타낼 수 있으면 좋은 수라고 한다. 좋은 수의 개수를 구하는 프로그램을 만들어보자. 첫째 줄에 수의 개수 n, 둘째 줄에 정수 n개가 주어진다. 시간 제한은 2초, 메모리 제한은 256MB이다. 투포인터 알고리즘을 사용하는 문제이다. 숫자가 정수이기 때문에 음수나 0이 들어올 수 있다는 걸 염두해두고 문제를 풀어야 한다. 그렇기 때문에 수를 구할 때 자기 자신은 제외하고 카운팅 해야 한다. k는 0부터 n까지 i가 j보다 작을 때까지 arr[i]+arr[j]값이 arr[k]값과 같다면 i와 j가 k가 아니라면 카운팅 추가 후 반복문 종료 i나 j가 k라면 ..