[BAEKJOON 1436번 : 영화감독 숌]
[문제]


[고찰]
이 문제를 봤을 때, 도대체 무슨 소리인지 하나도 모르겠었습니다.
사실 다른 분들의 풀이를 여러번 보았는데도 이해가 안됐었습니다.
하지만 코드를 이해하고 보니, 그제서야 무슨 소리인지가 이해가 되었습니다.
처음에는 어떤 규칙이 숨어있나 계속 뜯어보고, 생각하고 했었는데 규칙이 아니였습니다.
문제에서 요구하는 것은 666을 제일 작은 종말의 수로 하여금, 666이 포함된 N번째로 작은 종말의 수를 찾으라는 것이었습니다.
즉, 666부터 시작하여 계속 증가시키면서 666이 포함된 작은 수를 출력하라는 것이었습니다.
이를 기반으로 내용을 정리해보겠습니다.
[개념]
문제를 풀기 전, 알아야 할 개념은 to_string과 find입니다.
간단하게 설명하면,
to_string은 인자를 string으로 변환시켜주는 것이고,
find는 인자가 있는지 확인하여 문자열에서 위치를 리턴합니다. 그리고 만약 존재하지 않는다면 string::npos를 리턴합니다.
이 개념을 알고, 문제를 풀 때 필요한 변수는 count와 number입니다.
count는 반복문에서 n과 같을 때, n번째로 작은 종말의 수를 찾았다는 것을 확인하기 위한 변수로, 초기값은 0으로 선언합니다.
number는 666으로 선언하여, 반복문에서 n번째로 작은 종말의 수를 찾기 전까지 계속 ++ 연산자로 1씩 더해줍니다.
while (true)
{
if (to_string(number).find("666") != string::npos)
count++;
if (count == n)
{
cout << number;
break;
}
number++;
}
[정리]
이번 문제는 사실 어떻게 했어도 이해가 되지 않았을 것 같습니다..
정말 많은 시간을 투자하면서 고민을 했는데도, 문제 자체를 파악하지 못했기 때문입니다.
많은 문제를 풀다보면 괜찮아지지 않을까 생각해봅니다..
[Solution]
#include <iostream>
#include <string>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
int count = 0;
int number = 666;
while (true)
{
if (to_string(number).find("666") != string::npos)
count++;
if (count == n)
{
cout << number;
break;
}
number++;
}
return 0;
}'코딩 테스트' 카테고리의 다른 글
| [코딩테스트 40일차] BAEKJOON 9012번 : 괄호 (2) | 2025.07.11 |
|---|---|
| [코딩테스트 37일차] BAEKJOON 2563번 : 색종이 (1) | 2025.06.28 |
| [코딩테스트 35일차] BAEKJOON 10814번 : 나이순 정렬 (0) | 2025.06.24 |
| [코딩테스트 34일차] BAEKJOON 11650번 : 좌표 정렬하기, 1193번 : 분수찾기 (0) | 2025.06.23 |
| [코딩테스트 33일차] BAEKJOON 1181번 : 단어 정렬 (0) | 2025.06.21 |