Written by JS970
on
on
1436 - 영화감독 숌
- 난이도: 실버 5
- 날짜: 2022년 11월 1일
- 상태: Correct
- 추가 검토 여부: Yes
solution
- 10000번째 악마의 숫자까지 세야 한다.
- 각 자리 숫자를 나타내는 변수 i, j, k, l을 선언한다. 각 변수는 0에서 9의 값을 가질 수 있다.
- devilnum이 저장되는 set 컨테이너 devilnum을 선언한다.
- 4중 for문을 선언하여 i, j, k, l의 값을 바꿔 가며 666이 포함된 수를 set에 넣는다.
- set의 insert를 사용하여 삽입 즉시 크기순으로 정렬되도록 한다.
- 출력할 N번째 악마의 숫자를 찾기 위해 iterator를 사용한다. set은 직접 참조가 되지 않으므로 for문을 사용하여 devilnum.begin()부터 시작하여 N만큼 iterator를 증가시킨다.
- iterator를 사용하여 검색한 악마의 숫자를 출력한다.
- 위의 순서대로 구현하니 정답을 출력했다.
- 경우의 수를 생각해 보았을 때 가능한 범위여서 4중 for문을 사용하였으나… 아무리 생각해도 난잡한 코드이다.
- 새로운 풀이 방법을 알아보아야 겠다.
code
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> devilnum;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
for (int k = 0; k < 10; k++)
{
for (int l = 0; l < 10; l++)
{
devilnum.insert(i*1000000 + 666*1000 + j*100 + k*10 + l);
devilnum.insert(i*1000000 + j*100000 + 666*100 + k*10 + l);
devilnum.insert(i*1000000 + j*100000 + k*10000 + 666*10 + l);
devilnum.insert(i*1000000 + j*100000 + k*10000 + l*1000 + 666);
}
}
}
}
int index;
cin >> index;
set<int>::iterator iter;
iter = devilnum.begin();
for(int i = 0; i < index; i++) iter++;
iter--;
cout << *iter << endl;
return 0;
}