본문 바로가기

알고리즘 문제풀이200

[백준 1874] 알고리즘 39일차 : 스택 수열 https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 스택 C++ 처음에 문제 이해를 못해서 이해하는데 시간이 좀 걸렸다. 1부터 n까지의 수가 연속된 수라는 점을 이해하면 된다. 1부터 n까지의 수가 섞여있는 수열이 주어지고 나는 1,2,3,4,...,n 까지의 수를 순서대로 스택에 push할 수 있고 또 pop하면서 결과적으로 pop하여 만들어진 수열이 입력된 수열.. 2020. 8. 7.
[백준 4949] 알고리즘 38일차 : 균형잡힌 세상 https://www.acmicpc.net/problem/4949 4949번: 균형잡힌 세상 문제 세계는 균형이 잘 잡혀있어야 한다. 양과 음, 빛과 어둠 그리고 왼쪽 괄호와 오른쪽 괄호처럼 말이다. 정민이의 임무는 어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단 www.acmicpc.net 스택 C++ (2011 ICPC japan) 괄호가 섞인 문자열이 주어지고 괄호가 균형이 맞는지 조사하는 문제 (, [ 가 입력되면 stack에 push하고 ), ]가 입력되면 stack에서 pop한 값이 짝이 맞는지 검사한다. 이때 짝이 맞지 않으면 균형잡힌 문자열이 아닌걸로 판단하고 결과를 출력하고 또 마지막에 stack이 비어있지 않으면 균형잡힌 문자열이 아닌걸로 판단하고 출력한다. 소스코드.. 2020. 8. 6.
[백준 9012] 눈물겨운 알고리즘 37일차 : 괄호 https://www.acmicpc.net/problem/9012 9012번: 괄호문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)��www.acmicpc.net  스택 C++(,) 괄호로만 구성되어 있는 문자열에서 괄호가 짝이 맞는지 검사하는 문제 아무래도 문자열이 아직도 손에 익지 않은 것 같다.입력받는데에서 확신이 없어서 의심을 멈출수가 없었다.ㅋㅋ 스택을 굳이 써야하나 싶어서 스택 안쓰고 코드를 짜다가잘 안돼서 그냥 스택을 쓰자 하고 정석으로 풀었다.역시 정도가 가장 빠른길이여 스택은 하나 넣을때마다 처리! 가 중요한 .. 2020. 8. 5.
[백준 10773] 알고리즘 36일차 : 제로 https://www.acmicpc.net/problem/10773 10773번: 제로 문제 나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다. 재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 �� www.acmicpc.net 스택 C++ 숫자를 입력받아 스택에 쌓다가 0을 입력받으면 pop하고 마지막에 스택에 쌓여있는 수의 합을 구하는 문제 스택 문제가 대체로 평이한 것 같다. 소스코드 #include using namespace std; class Stack{ public: int size; int* stack; Stack(int maxSize){ size = 0; stack = new int[maxSize]; } void .. 2020. 8. 3.
[백준 11051] 알고리즘 35일차 : 이항 계수 2 https://www.acmicpc.net/problem/11051 11051번: 이항 계수 2 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net 수학3, 동적계획법 C++ 이항계수를 동적계획법으로 푸는 문제 (간략) 작년 알고리즘 수업에서 배우고 또 비슷한 손코딩 문제가 시험에도 나왔었던 문제 이항계수였는지는 기억안남 DP에서 피보나치와 함께 배운 기억이 난다. 두 문제 모두 재귀를 배울때 나오는 개념들이지만 사실 시간복잡도면에서 보면 배열을 사용해서 반복문을 쓰는게 훨씬 효율적이다. (이걸 동적계획법 부분에서 배움 매번 이런식이지 비효율적인거 실컷 가르쳐놓고 효율적인 방법 나중에 알려주기 교수님 : 하지만 .. 2020. 7. 31.
[백준 1018] 알고리즘 34일차 : 체스판 다시 칠하기 https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 브루트포스 C++ 규칙없이 칠해져있는 큰 판을 잘라서 8*8체스판을 만드는데 다시 칠해야 하는 칸이 최소인 경우 최솟값을 출력하는 문제 예전에 입력값 긴거 보고 패스했었는데 실버5라고 떠서 브루트포스 끝낼겸 시도해봤다. 접근방법 우선 접근방법은 브루트포스인 만큼 입력받은 큰 판에서 8*8판이 만들어 지는 모든 경우를 조사하는 것이다. 체스판을 다시 칠하는 칸의 개수를 조사하는 과정은 처음엔.. 2020. 7. 30.
[백준 1312] 알고리즘 33일차 : 소수 https://www.acmicpc.net/problem/1312 1312번: 소수 피제수(분자) A와 제수(분모) B가 있다. 두 수를 나누었을 때, 소숫점 아래 N번째 자리수를 구하려고 한다. 예를 들어, A=3, B=4, N=1이라면, A÷B=0.75 이므로 출력 값은 7이 된다. www.acmicpc.net 수학 C++ 정수를 나눈 결과의 소숫점 백만자리까지 출력할 수 있어야 한다. double, float자료형 모두 백만자리까지의 소수점을 저장하지는 않으므로 나눗셈을 반복문으로 구현해서 값을 출력해야한다. 접근방법은 정수의 나눗셈을 반복문을 이용해서 구현하는 것 A/B라면 A를 B로 나눈 나머지에 10을 곱한다. 그 과정을 N만큼 반복한 뒤 마지막에 A를 B로 나눈 값을 출력하면 끝 소스코드 #.. 2020. 7. 29.
[백준 3036] 알고리즘 32일차 : 링 https://www.acmicpc.net/problem/3036 3036번: 링 문제 상근이는 창고에서 링 N개를 발견했다. 상근이는 각각의 링이 앞에 있는 링과 뒤에 있는 링과 접하도록 바닥에 내려놓았다. 상근이는 첫 번째 링을 돌리기 시작했고, 나머지 링도 같이 돌� www.acmicpc.net 수학3 C++ 풀다가 느낀건데 수학으로 분류되는 문제는 지금의 나보다 고3의 내가 더 잘풀 것 같다. 첫번째 링을 한 바퀴 돌렸을 때 인접한 링이 도는 횟수는 첫번째 링의 둘레/인접한 링의 둘레이다. 결국 그냥 반지름의 비이다. R1/R2 구하는거라 뭐지 왜 실버3이지 했는데 문제가 의도한건 약분이었다. 약분은 두 수의 최대 공약수로 두 수를 나눈 값을 출력하는 방법으로 구현했다. 접근 방법 요약 인접하는 .. 2020. 7. 28.
[백준 9663] 알고리즘 31일차 : N-Queen https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 백트래킹 C++ 백트래킹의 고전 문제 N-Queen 문제이다. 아무리 그래도 규칙 설명 한 줄이 없다. 접근방법 알고리즘 수업 때 배운 로직을 사용했다. 각 행에 퀸이 놓여있는 열 인덱스를 담은 col 배열을 전역변수로 선언해두고 한 행 안에서 각 열에 대한 반복문을 돌면서 퀸을 놓고 함수를 재귀 호출한 뒤 다시 퀸을 거두면서 백트래킹을 구현했다. promising을 함수 초반에 호출하여 검사하는게 직관적으로 와.. 2020. 7. 27.