나도 공부한다/알고리즘
[백준] 1436. 영화감독 숌 (C++)
꾸빵이
2023. 1. 24. 17:20
Key Point
딱히 없다.
Idea
수식으로 풀 수 있는 방법이 있을까 오래 고민해봤지만 알고리즘 분류가 브루트포스로 되어있어서 결국 string find을 사용했다. 666부터 시작해서 1씩 더하며 만약 666이 들어가는 숫자라면 count해주는 방법으로 풀었다.
참고로 C++에는 find 함수가 두개다. algorithm 헤더에 포함된 find 함수와 string 헤더에 포함된 find 함수가 있다.
<algorithm> find
지정된 범위(배열, 벡터 등) 내에서 특정 값을 찾아낼 때 사용한다. 아래 코드의 출력값은 3이다.
배열을 이용할 땐 다음과 같이 포인터로 find 함수의 반환값을 받는다.
int arr[] = { 1,2,3,4,5 };
int* p;
p= find(arr, arr+5, 3);
cout << *p << endl;
벡터를 이용할 땐 iterator it으로 find 함수의 반환값을 받는다.
vector<int>v = { 1,2,3,4,5 };
auto it = find(v.begin(), v.end(), 3);
cout << *it << endl;
<string> find
문자열 내에서 특정 문자열의 인덱스를 찾을 때 사용한다. 문자 또는 문자열이 존재하면 해당 인덱스를 반환하고, 없으면 string::npos를 반환한다. 예를 들어 "hi hello"라는 문자열이 있고 여기서 hello라는 문자열을 찾고자 하면 hello가 시작되는 위치인 3이 반환된다.
string str = "hi hello";
cout << str.find("hi") << endl;
Code
#include <iostream>
#include <string>
using namespace std;
int main() {
int n = 0;
int title = 666;
int cnt = 0;
cin >> n;
while (1) {
if (to_string(title).find("666")!=string::npos) cnt++;
if (cnt == n) break;
title++;
}
cout << title << endl;
return 0;
}