분류 전체보기 132

백준 10866번 c++ 풀이

안녕하세요 오늘은 덱(deque)의 함수를 입력받고 그에따른 행동을 해야하는 문제를 풀어보겠습니다. stl container에는 deque를 지원하기때문에 구현이 어려운게 단점이 deque의 단점을 보완할 수 있습니다. 전략: 1. deque를 선언해주고(deque dq), for문을 이용하여 string타입으로 변수 x를 N번 입력을 받아줍니다. 2. 입력받은 x의 문자를 비교하여 push_back인지, push_front인지, front인지 등등확인해줍니다. dq.size()가 0이면 -1을 출력해야하는 것에 주의해야합니다. 코드: #include using namespace std; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); deq..

BOJ 문제풀이 2021.08.06

백준 2164번 c++ 풀이

안녕하세요 오늘은 큐 개념을 이용하면 아주 간단하게 풀리는 문제를 풀어보도록 하겠습니다. 전략: 1. 큐를 선언해주고 N번 반복하는 for문에서 q.push()를 이용하여 카드를 배열한다. 2. q.size()가 1이 아니면 while문을 반복하게 while문을 작성한다. 3. q.size()가 1이될때까지 q.pop(), q.pop(q.front()), q.pop() 순서대로 작성하여 1이되면 그 값을 출력한다. 코드: #include using namespace std; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int N; cin>>N; queue q; for(int i= 1; i

BOJ 문제풀이 2021.08.06

백준 10845번 c++ 풀이

안녕하세요 오늘은 큐의 함수를 입력했을때, 그 함수가 실행되고, 그 경과를 출력해야하는 문제를 풀겠습니다. 전략: 1. 큐를 선언한다. 2. N번 반복하는 for문을 만들어서 string타입의 a변수를 선언하여 cin으로 입력을 받는다. 3. 입력 받은 a가 push이면 또 int타입의 변수를 선언하여 push함수를 실행해준다. 4. 그 외 front, back, pop은 q.size()를 통하여 만약 안에 들어있는 정수가 존재하지 않는다면 -1을 출력해주고 그게 아니라면 정상적으로 그 함수들을 실행해준다. 코드: #include using namespace std; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int N; cin>>N; ..

BOJ 문제풀이 2021.08.06

백준 18870번 c++ 풀이

안녕하세요 오늘은 이진탐색함수 및 정렬함수를 사용하는 문제를 풀어보겠습니다. 전략: 1. 두개의 벡터를 세운다(v, temp) 각각 입력을 받은 벡터, 입력받은 벡터에서 중복값을 삭제시키고 정렬한 벡터 2. 입력을 받는 for문을 세운다. 3. sort함수를 이용하여 sort를 이용하여 temp 벡터를 정렬시켜준다. 4. 정렬된 temp벡터에 erase 함수와 unique함수를 이용하여 중복을 찾아서 지워준다. 5. for문을 작성하고, 그 안에 이진탐색 방법으로 v[i]값들의 위치를 찾는 변수를 선언해서 출력해준다. 코드: #include #include using namespace std; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); ..

BOJ 문제풀이 2021.08.05

백준 1920번 c++ 풀이

안녕하세요 오늘은 이분 탐색을 이용한 문제를 풀어보겠습니다. 이 문제는 쉽지만 이분탐색을 이용하여 풀어야한다는 점이 약간 까다롭다고 할 수 있겠습니다. 바이너리 서치를 구현한 함수를 잘 보면서 이해하시길 바랍니다. 코드: #include using namespace std; vector v; int binarySearch(int low, int high, int target){ if (low > high) return 0; else{ int mid = (low + high) / 2; if (v[mid] == target) return 1; else if (v[mid] > target) return binarySearch(low, mid - 1, target); else return binarySearch..

BOJ 문제풀이 2021.08.04

백준 1259 c++ 풀이

안녕하세요 오늘은 어떠한 수의 대칭성 유무를 파악해보겠습니다. 이 문제는 인풋을 string 타입으로 받는것이 좋습니다. 그후에, 이 인풋이 "0"이라는 문자이면 while 문에서 벗어나고, 그것이 아니면 a라는 인풋의 문자열 길이를 대입하는 변수를 만들어줍니다. 이 문자열의 길이가 짝수인지 홀수인지 판별하여 반복문을 돌려서, 양끝 문자를 비교합니다. 코드: #include using namespace std; int main(){ while(1){ string x; cin>>x; if(x=="0") break; int a = x.length(), count=0; if(a%2==1){ for(int i = 0; i

BOJ 문제풀이 2021.08.04

백준 2920번 c++ 풀이

안녕하세요 오늘은 쉬운 편에 속하는 문제를 풀어보겠습니다. 우선은 계속 8번동안 비교하면서 i번째 때 인풋이랑 i랑 다르면 as를 false로 지정해주고, i번째 반복때, 인풋이랑 9-i랑 다르면 de를 false로 지정해줍니다. 그리고 if문으로 출력합니다. 코드: #include using namespace std; int main(){ bool as = true, de = true; for(int i = 1; i>x; if(i!=x) as=false; if(x!=9-i) de = false; } if(as) cout

BOJ 문제풀이 2021.08.04

백준 2108번 c++ 풀이

안녕하세요 오늘은 특정 알고리즘을 사용하지 않아도 되는 문제를 풀어보겠습니다. 이 문제는 다른것들은 어렵지 않은데 3번째로 출력해야하는 것이 조금 까다롭습니다. 우선은 8001짜리 길이의 배열을 만들어주어, -4000~4000의 숫자들을 관리할 수 있게 하겠습니다. 그런다음 int x로 인풋을 받고 그 값을 4000 더해준 배열의 위치의 값에 1을 더해줍니다. 배열의 원소들 중 최대값(최빈수)을 구해준다음, 그 최대값을 배열에서 검색해서 그 위치를 알아낸다음 두번째 값에다가 4000을 빼준값을 출력하면 됩니다. 코드: #include #include using namespace std; int main(){ int N, sum= 0; cin>>N; vector v; vector res(8001); for..

BOJ 문제풀이 2021.08.04