해당 문제는 백준 온라인 저지에서 나온 문제입니다
자동 정렬과 조건을 수행하기 위해 STL 컨테이너 중 우선순위 큐를 사용하여 문제를 해결했습니다.
// Baekjoon.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다.
//
/*
https://www.acmicpc.net/problem/1181
*/
#include <iostream>
#include <algorithm>
#include <queue>
#include <list>
#include <string.h>
using namespace std;
struct cmp [0]
{
bool operator()(string dest, string sour)
{
if (dest.size() == sour.size())
{
int compare = strcmp(dest.c_str(), sour.c_str());
return compare > 0;
}
else
{
return dest.size() > sour.size();
}
}
};
int main()
{
priority_queue<string, vector<string>, cmp> wordQueue;
string popedWord;
int wordCount = 0;
string word;
cin >> wordCount;
for (int i = 0; i < wordCount; i++)
{
cin >> word;
wordQueue.push(word);
}
while (!wordQueue.empty())
{
if (!popedWord.empty() &&
strcmp(wordQueue.top().c_str(), popedWord.c_str()) == 0)
{
wordQueue.pop();
}
else
{
cout << wordQueue.top() << endl;
popedWord = wordQueue.top();
wordQueue.pop();
}
}
}
0번 구문은 함수호출 연산자를 활용하여 두 원소를 비교하여 매번 처리를 진행했습니다.
string이 비용이 많이 잡아먹긴 하나, 성능이 강력하고 문제에서 제시한 메모리 비용을 넘지 않을 것이라 예상해 사용했습니다.
중복되는 값을 처리하기 위해, 가장 최근에 pop된 문자열을 기억하고 있다가, 중복되는 값이 나오면 출력을 건너뛰게 처리했습니다.
브루트 포스 알고리즘, 완전 탐색 알고리즘이라 부르는 방식으로 모든 경우의 수를 가정하여 작업했습니다.
// Baekjoon.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다.
//
/*
https://www.acmicpc.net/problem/1181
*/
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
bool inNumber666(int number)[0]
{
string numberStr;
numberStr = to_string(number);
int count = 0;
for (int i = 0; i < numberStr.size() - 2; i++)
{
if (numberStr[i] != '6')[1]
continue;
count = 0;
for (int j = i; j < i + 3; j++)
{
if (numberStr[j] == '6')
count++;
else[2]
break;
}
if (count >= 3)
{
return true;
}
}
return false;
}
int main()
{
int movieNumber = 666;
int index = 0;
int findNumber = 0;
cin >> findNumber;
while (1)
{
if (inNumber666(movieNumber))
{
index++;
if (index == findNumber)
break;
}
movieNumber++;
}
cout << movieNumber;
return 0;
}
모든 경우의 수를 검사하는 완전탐색 문제이므로 0번 구문의 조건에 맞을때까지 반복문을 돌며 정답을 찾습니다.
1번과 2번 구문은 해당 값이 "완전히" 조건에서 벗어난 케이스를 예외처리 하여 검사횟수를 줄였습니다.
계속 ㄱㄱ
2번 영화감독 숌의 경우, 처음에는 완전탐색 문제인지 모르고 효율적인 방식을 찾아보겠다고 이리저리 고집하다가, 결국 반복문을 돌리는 것으로 끝났습니다. 문제를 제대로 판별하는 능력을 기르는 것이 중요하겠네요.