목록알고리즘 (172)
컴굥일지
문제 https://www.acmicpc.net/problem/2751 문제 내용 수를 입력받아서 정렬하여 출력하면 된다. 문제에서는 O(nlogn)의 시간 복잡도로 풀라고 되어있다. 문제 풀이 c++의 경우는 sort()를 쓰면 쉽게 정렬할 수 있다. 코드 #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //입력 int n;cin >> n; vector arr(n); for (int i = 0; i > arr[i]; //정렬 sort(arr.begin(), arr.end()); //출력 for (int i = 0; i ..
문제 https://www.acmicpc.net/problem/1436 문제 내용 666이 들어간 숫자 중에서 n번째 숫자를 출력하면 되는 문제이다. n=1이면 666, n=2이면 1666, n=3이면 2666 이런 식으로 진행된다. 문제 풀이 완전탐색으로 문제를 풀었다. 숫자의 크기를 1씩 키워가며 666이 들어있는지를 확인했는데, 이를 위해 숫자를 문자열로 변환하는 과정이 필요하다. 코드 #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //입력 int n; cin >> n; //문제 해결 int num = 666; string tmp; whil..
문제 https://www.acmicpc.net/problem/17478 문제 내용 숫자를 입력받아서, 위와 같이 재귀적인 응답을 출력하는 문제이다. 문제 풀이 재귀 함수를 만들어 풀면 된다. 다만, 이 문제에서 주의해야 할 점은, ----가 아닌 ____(언더바)라는 것이며, 공백도 주의해야 한다. 따옴표 또한 출력해야 하기 때문에 \" 같은 방식으로 작성해야 한다. 마지막으로, 함수를 만들 때 return type을 int로 하면 백준에서 런타임 에러가 발생했다. void로 하는 것을 추천한다. 코드 #include using namespace std; string str=""; void recur(int n) { string line = str; if (n==0) { cout
문제 https://www.acmicpc.net/problem/10872 문제 내용 재귀를 사용하여 팩토리얼 함수를 구현하면 되는 문제이다. 문제 풀이 재귀 문제 중에 가장 기본적인 문제이다. 함수 안에 반드시 종료 조건이 있어야 함을 유의하면 된다. 코드 #include using namespace std; int factorial(int num) { if (num > n; //결과 출력 cout
문제 https://www.acmicpc.net/problem/7568 문제 내용 전체 사람들의 몸무게와 키를 입력받아, 덩치 등수를 순서대로 출력하면 된다. 덩치 등수는 자신보다 몸무게와 키 모두 큰 사람의 수 + 1 을 하면 된다. 문제 풀이 완전탐색으로 문제를 해결할 수 있다. pair로 몸무게와 키를 입력받는다. 이후, 반복문을 돌며, 자신보다 몸무게와 키가 모두 큰 사람의 수를 count 하고, 출력하면 된다. 코드 #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //입력 int n; cin >> n; vectorarr; int w, h;..
문제 https://www.acmicpc.net/problem/1541 문제 내용 입력받은 식에 괄호를 적절히 쳐서, 식의 값을 최소로 만들면 된다. 식에는 0~9까지의 숫자, +, - 만이 올 수 있고, 시작과 끝은 반드시 숫자이다. 문제 풀이 식의 값을 최소로 만드는 것이 핵심이다. 그렇기 때문에 - 가 입력되면 그 뒤를 모두 뺄셈 처리하면 된다. ex-1) 55 - 50 + 45 => 55 - ( 50 + 45 ) = - 40 ex-2) 55 - 50 + 45 - 30 + 20 => 55 - ( 50 + 45 ) - ( 30 + 20 ) = -90 ex-2에서 알 수 있다시피, 처음으로 나오는 - 뒤의 숫자를 전부 빼주면 된다. 코드 #include #include using namespace st..
문제 https://www.acmicpc.net/problem/10162 문제 내용 전자레인지 버튼을 최소한으로 눌러서 시간을 맞추어야 한다. 시간의 단위는 A버튼 300초, B버튼 60초, C버튼 10초이다. A, B, C 버튼으로 시간을 정확히 맞출 수 없다면 -1을 출력한다. 문제 풀이 버튼의 시간이 서로 배수관계에 있으므로 greedy 문제이다. 일단 10으로 나누었을 때, 나머지가 발생한다면 -1을 출력하고 프로그램을 끝낸다. 그렇지 않으면 300초, 60초, 10초를 차례로 나눠가며 계산하면 된다. 코드 #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //입력 int ..
문제 https://www.acmicpc.net/problem/5585 문제 내용 물건을 사고 1000엔 지폐를 낸다. 잔돈은 500엔, 100엔, 50엔, 5엔, 1엔이 준비되어있다. 거스름돈을 최소 개수로 받는다고 할 때, 잔돈의 개수를 구하면 된다. 문제 풀이 잔돈이 서로 배수관계에 있으므로 greedy 문제이다. 잔돈이 큰 것부터 먼저 계산하면 된다. 코드 #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //입력 int num,result=0; cin >> num; num = 1000 - num; //문제 해결 result += num / 500; num %= 500; r..
문제 https://www.acmicpc.net/problem/2605 문제 내용 학생들이 번호를 뽑는다. 이때 모두 자신의 순서 미만의 번호를 뽑는다. 세 번째 학생이 0을 뽑으면 그냥 자신의 자리에 있고, 1을 뽑는다면 한 칸 앞으로 가며, 2를 뽑으면 두 칸 앞으로 간다. 자신이 뽑은 순서만큼 앞으로 거슬러가는 것이다. 문제 풀이 나는 insert를 이용하여, 자신이 뽑은 수만큼의 위치에 저장하도록 했다. 그리고 역순으로 출력하면, 문제에서 원하는 대로 출력이 가능하다. 코드 #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //입력 int n..
문제 https://www.acmicpc.net/problem/4949 문제 내용 문장을 입력받아서 문장 안에 있는 괄호를 순서대로 체크하여 균형 잡혀있는지 아닌지를 판단하는 문제이다. . 하나만 들어왔을 때, 프로그램이 종료되게 해야 한다. 문제 풀이 [백준 9012 괄호] 문제에서 조금 발전된 형태라고 생각하면 된다. 다만, 문장 안에서 ( ) [ ] 이 네 가지 괄호만 체크해야 하고, 입력되는 문자열에 공백이 포함된다는 것에 유의하자. 입력 문자열에 공백이 포함되었기 때문에 getline을 이용해서 한 줄을 입력받으면 된다. 또한, checkVPS함수를 약간 수정해주면 된다. ( [ 이 두 가지 종류의 괄호는 스택에 그대로 추가해주면 된다. 하지만, ) ] 이 닫는 괄호들은 스택의 top에 자신과 ..