나도 공부한다/알고리즘

[백준] 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;
}