[백준] 1436번 영화감독 숌

Peace·2020년 12월 28일
0

[백준] 1436번 영화감독 숌

문제

문제 링크 : https://www.acmicpc.net/problem/1436

입력

출력

문제 해결 방법

6이 3번 연속으로 들어간 수 중에서 n번째로 작은 것을 출력하면 된다.
즉 6이 3번 연속으로 들어간 수들의 순서를 정하면 된다.
나는 665부터 입력으로 받은 n번째 작은 숫자가 나올 때까지 while문을 돌렸다. 666이 연속으로 나온 것을 찾기 위해, 665부터 숫자를 하나씩 올려서 int를 string으로 변환하여 666이 string안에 있는 지에 대해 알아보았고, 만약 들어있다면, string의 length보다 작은 수를 return하기 때문에, 그것으로 666의 여부를 판단하고, count를 해주었다. 만약 count숫자와 처음에 입력받은 숫자가 동일하다면 while문을 종료하게 하여, 그 때의 숫자를 출력해주었다.

코드 구현(c++)

#include <iostream>
#include <string>

using namespace std;

int main(){
    int num;
    scanf("%d",&num);
    string match = "666";
    int name = 665;
    int count = 0;
    while(1){
        string name_str = to_string(name);
        if(name_str.find(match) < (int)name_str.length()){
            count++;
        }
        if(count == num) break;
        name++;
    }
    printf("%d\n",name);

}

평가

이 문제는 로직 자체는 매우 쉬웠다. 단순히 string의 find와 while에 대한 이해만 있으면 쉽게 풀 수 있었다. while문을 조금만 돌아가고 문제를 풀 수 있는 방법에 대해 생각해보면 좋을 것 같다.
c++의 find는 동일한 문자열을 찾지 못하면 -1이 아닌 쓰레기 값을 return한다.

profile
https://peace-log.tistory.com 로 이사 중

0개의 댓글

관련 채용 정보