전체 글 127

백준 9012번 c++ 풀이

안녕하세요 오늘은 스택을 이용해서 간단하게 문제를 풀어보겠습니다. 전략: 1. 한 글자씩 비교할 것이므로 char타입을 stack을 선언해준다. 2. 만약 스택의 제일 위가 ')'이면 count++, s.pop()을 해주고, 그게 아니라면 count--, s.pop()을 해줌으로 count가 음수가 되면 실행이 끝내게 한다. 3. 만약 (, )짝이 맞는다면 count는 결론적으로 0이 될 것이므로 만약 0이면 YES를 출력하고 그것이 아니면 NO를 출력한다. 코드: #include using namespace std; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int T; cin>>T; for(int i= 0; i>N; int len =..

BOJ 문제풀이 2021.08.07

백준 11866번 c++ 풀이

안녕하세요 오늘은 큐를 이용하여 간단하게 문제를 풀어보겠습니다. 이 문제에서 큐를 사용해야 하는 이유는 첫 줄에 있습니다. N명의 사람이 '원'을 이루면서 앉아있다고 했습니다. 그래서 K번째 사람을 셀 때, q.push(a.front), q.pop을 k-1번 반복한다음, q.pop을 하면 구현이 됩니다. 전략: 1. queue를 선언해주고, 1부터 N까지 자연수들을 q.push()함수를 통해 대입해준다. 2. while 문에 0~k-2까지 반복하는 for문을 만들어 q.push(q.front()), q.pop()을 통해 앞에 있는 숫자를 뒤로 보내주고, q.front()를 출력해준다. 코드: #include using namespace std; int main(){ ios::sync_with_stdio(..

BOJ 문제풀이 2021.08.06

백준 9184번 c++ 풀이

안녕하세요 오늘은 동적 계획법(다이나믹 프로그래밍)을 이용한 문제를 풀어보겠습니다. 역시 동적계획법 문제는 점화식이 많은 것 같습니다. 이 문제는 w(a, b, c)인 변수가 3개가 필요한 함수이므로 피보나치 풀이와는 다르게 '3'차원 배열을 만들어서 풀겠습니다. 전략: 1. 3차원 배열 arr를 각각 101의 크기로 선언한다.(주어진 범위가 -50~50이기 때문) 2. int w(int a, int b, int c) 함수를 선언한다. 이 함수는 처음 하는 행동이 x = a+50, y = b+ 50, z = c+50을 해준 다음, 만약 arr[x][y][z]가 있으면 계산 할 필요 없이 바로 return해준다. 이부분이 동적 계획법이라고 할 수 있는 부분일 것이다. 3.그 외에는 문제에서 주어진 함수와 ..

BOJ 문제풀이 2021.08.06

백준 10816번 c++ 풀이

안녕하세요 오늘은 이분탐색으로 풀면 빨리 풀리는 문제를 풀어보겠습니다. (다른 방식으로 푼 저는 엄청난 메모리와 시간을 맛봤지요 맞긴했지만..) 두가지 방법으로 문제를 풀어보겠습니다만, 2번째 방법을 추천드립니다. 전략1 1. 범위를 확인한 후, 20000001길이의 벡터를 선언해준다(어레이로 선언하면 배열 길이 제한때문에 안된다) 2. x+= 10000000을 해준후, x+1번째 배열의 원소 값에 1을 더해준다. 3. 2번째 입력때 x+= 10000000을 해준다음 그 위치에 있는 원소값을 출력한다. 코드1(내가 한 번에 풀었던 방식): #include #include using namespace std; int main(){ vector arr(20000001); ios::sync_with_stdio..

BOJ 문제풀이 2021.08.06

백준 10828번 c++ 풀이

안녕하세요 오늘은 스택(stack) 자료구조를 이용한 문제를 풀어보겠습니다. stl container에는 stack을 구현할 필요없이 이미 있기 때문에 편하게 풀 수 있습니다. 전략: 1. stack를 선언해주고(stack s), for문을 이용하여 string타입으로 변수 x를 N번 입력을 받아줍니다. 2. 입력받은 x의 문자를 비교하여 push인지, pop인지, top인지 등등확인해줍니다. s.size()가 0이면 -1을 출력해야하는 것에 주의해야합니다. 코드: #include using namespace std; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int N; cin>>N; stack s; for(int i= 0; i>x; ..

BOJ 문제풀이 2021.08.06

백준 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