본문 바로가기
백준 9996 한국이 그리울 땐 서버에 접속하지 (문자열) 문제선영이는 이번 학기에 오스트레일리아로 교환 학생을 가게 되었다. 호주에 도착하고 처음 며칠은 한국 생각을 잊으면서 즐겁게 지냈다. 몇 주가 지나니 한국이 그리워지기 시작했다. 선영이는 한국에 두고온 서버에 접속해서 디렉토리 안에 들어있는 파일 이름을 보면서 그리움을 잊기로 했다. 매일 밤, 파일 이름을 보면서 파일 하나하나에 얽힌 사연을 기억하면서 한국을 생각하고 있었다.어느 날이었다. 한국에 있는 서버가 망가졌고, 그 결과 특정 패턴과 일치하는 파일 이름을 적절히 출력하지 못하는 버그가 생겼다.패턴은 알파벳 소문자 여러 개와 별표(*) 하나로 이루어진 문자열이다.파일 이름이 패턴에 일치하려면, 패턴에 있는 별표를 알파벳 소문자로 이루어진 임의의 문자열로 변환해 파일 이름과 같게 만들 수 있어야 한다.. 2024. 9. 2.
백준 11655 : ROT13 문제ROT13은 카이사르 암호의 일종으로 영어 알파벳을 13글자씩 밀어서 만든다.예를 들어, "Baekjoon Online Judge"를 ROT13으로 암호화하면 "Onrxwbba Bayvar Whqtr"가 된다. ROT13으로 암호화한 내용을 원래 내용으로 바꾸려면 암호화한 문자열을 다시 ROT13하면 된다. 앞에서 암호화한 문자열 "Onrxwbba Bayvar Whqtr"에 다시 ROT13을 적용하면 "Baekjoon Online Judge"가 된다.ROT13은 알파벳 대문자와 소문자에만 적용할 수 있다. 알파벳이 아닌 글자는 원래 글자 그대로 남아 있어야 한다. 예를 들어, "One is 1"을 ROT13으로 암호화하면 "Bar vf 1"이 된다.문자열이 주어졌을 때, "ROT13"으로 암호화한 다.. 2024. 8. 28.
split 메서드 구현하기 c++에는 split 메서드가 없다#include #include using namespace std;vector split(const string& input, string delimiter) { vector result; auto start = 0; auto end = input.find(delimiter); while (end != string::npos) { result.push_back(input.substr(start, end - start)); start = end + delimiter.size(); end = input.find(delimiter, start); } result.push_back(input.substr(s.. 2024. 8. 27.
조합 구하기 재귀를 이용한 조합 구하기 dfs처럼 방문 체크를 해주면서 k개가 될때까지 계속 재귀를 돌기#include #include using namespace std;int n = 5, k = 3, a[5] = {1, 2, 3, 4, 5};void print(vector b){ for (int i : b) cout &b){ if (b.size() == k) { print(b); return; } for (int i = start + 1; i b; combi(-1, b); return 0;} -- 반복문을 이용해서 구하기n이 2개면 2중, 3개면 3중 for문..n이 많아질수록 비효율적이된다 2024. 8. 27.
순열 구하기 - next_permutation, 재귀 반복문으로 next_permutation 메서드를 이용해서 가능한 순열의 갯수를 구할 수 있다next_permutation메서드 안에 시작점, 끝점을 넣어주고 do - while 문으로 돌면 해당 배열 안의 원소들이 가능한 경우의 수 만큼 배치된다 ! 그냥 while 문의 경우 마지막 순열을 계산한 후 더 이상 계산할 순열이 없으므로 순열내 원소를 출력하지 않고반복문이 종료되버린다 , do-while 문을 사용 ! 오름차순을 기준으로 순열을 만들기때문에 정렬된 상태로 메서드를 호출해야한다int main() { int a[] = {1,2,3}; do{ for (int i : a) { cout  -- 재귀를 이용한 방식using namespace std;int a[.. 2024. 8. 27.
백준 1926 : 그림 (BFS) 문제어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로로 연결된 것은 연결이 된 것이고 대각선으로 연결이 된 것은 떨어진 그림이다. 그림의 넓이란 그림에 포함된 1의 개수이다.입력첫째 줄에 도화지의 세로 크기 n(1 ≤ n ≤ 500)과 가로 크기 m(1 ≤ m ≤ 500)이 차례로 주어진다. 두 번째 줄부터 n+1 줄 까지 그림의 정보가 주어진다. (단 그림의 정보는 0과 1이 공백을 두고 주어지며, 0은 색칠이 안된 부분, 1은 색칠이 된 부분을 의미한다)출력첫째 줄에는 그림의 개수, 둘째 줄에는 그 중 가장 넓은 그림의 넓이를 출력하여라. 단, 그림이 하나도.. 2024. 8. 4.
백준 5430 : AC (덱) 문제선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다. AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다.함수 R은 배열에 있는 수의 순서를 뒤집는 함수이고, D는 첫 번째 수를 버리는 함수이다. 배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다.함수는 조합해서 한 번에 사용할 수 있다. 예를 들어, "AB"는 A를 수행한 다음에 바로 이어서 B를 수행하는 함수이다. 예를 들어, "RDD"는 배열을 뒤집은 다음 처음 두 수를 버리는 함수이다.배열의 초기값과 수행할 함수가 주어졌을 때, 최종 결과를 구하는 프로그램을 작성하시오.입력첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 최대 100이다.각 테스트 케이스의 첫째 줄.. 2024. 8. 4.
백준 1021 : 회전하는 큐(덱) 문제지민이는 N개의 원소를 포함하고 있는 양방향 순환 큐를 가지고 있다. 지민이는 이 큐에서 몇 개의 원소를 뽑아내려고 한다.지민이는 이 큐에서 다음과 같은 3가지 연산을 수행할 수 있다.첫 번째 원소를 뽑아낸다. 이 연산을 수행하면, 원래 큐의 원소가 a1, ..., ak이었던 것이 a2, ..., ak와 같이 된다.왼쪽으로 한 칸 이동시킨다. 이 연산을 수행하면, a1, ..., ak가 a2, ..., ak, a1이 된다.오른쪽으로 한 칸 이동시킨다. 이 연산을 수행하면, a1, ..., ak가 ak, a1, ..., ak-1이 된다.큐에 처음에 포함되어 있던 수 N이 주어진다. 그리고 지민이가 뽑아내려고 하는 원소의 위치가 주어진다. (이 위치는 가장 처음 큐에서의 위치이다.) 이때, 그 원소를 주.. 2024. 8. 3.
c++ 코딩테스트 풀면서 알게 된 것들 기록 덱에서 특정 원소 인덱스 구하기int idx = find(DQ.begin(), DQ.end(), t) - DQ.begin(); find 함수만으로 하지 않고 -DQ.begin()으로 이터레이서 반복자를 빼 줘야 정확한 특정 원소 인덱스가 나온다 덱이 아닌 벡터, 리스트 등에서도 사용 가능하니 사용방법을 잘 익혀두자  12345를 입력받을때 1 2 3 4 5로 각각 숫자로 받으려면..char로 받고 - '0' 해주면 된다! 2024. 7. 31.
백준 1874 : 스택 수열 (스택) 문제스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다.1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라.입력첫 줄에 n (1 ≤ n ≤ 100,000)이 주어진다. .. 2024. 7. 21.
백준 1406 에디터 : 연결 리스트 문제한 줄로 된 간단한 에디터를 구현하려고 한다. 이 편집기는 영어 소문자만을 기록할 수 있는 편집기로, 최대 600,000글자까지 입력할 수 있다.이 편집기에는 '커서'라는 것이 있는데, 커서는 문장의 맨 앞(첫 번째 문자의 왼쪽), 문장의 맨 뒤(마지막 문자의 오른쪽), 또는 문장 중간 임의의 곳(모든 연속된 두 문자 사이)에 위치할 수 있다. 즉 길이가 L인 문자열이 현재 편집기에 입력되어 있으면, 커서가 위치할 수 있는 곳은 L+1가지 경우가 있다.이 편집기가 지원하는 명령어는 다음과 같다.LDBP $커서를 왼쪽으로 한 칸 옮김 (커서가 문장의 맨 앞이면 무시됨)커서를 오른쪽으로 한 칸 옮김 (커서가 문장의 맨 뒤이면 무시됨)커서 왼쪽에 있는 문자를 삭제함 (커서가 문장의 맨 앞이면 무시됨)삭제로.. 2024. 7. 19.