알고리즘/알고리즘 문제 풀이
[백준/c++] - 1436 영화감독 숌
빗방울소리
2022. 2. 11. 01:13
https://www.acmicpc.net/problem/1436
1436번: 영화감독 숌
666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타
www.acmicpc.net
666이 포함된 숫자를 크기 순서대로 세는 문제입니다.
#include <iostream>
#include <string>
using namespace std;
int main() {
int input, series = 0;
cin >> input;
int count = 666;
while (input != series) {
string num = to_string(count); // 검사하기 위해 문자열로 변환
for (int i = 0; i < size(num); i++) { // 해당 숫자에대해 조건이 맞는지 검사
if (num[i] == '6' && i + 2 < size(num) ) {
if ( num[i + 1] == '6') {
if ( num[i + 2] == '6') { // 맞다면 시리즈 up
series++;
break; // 6666 이 포함될 경우 중복해서 세므로 break
}
}
}
}
count++;
}
cout << count - 1; // whlie 문에서 빠져나올때 검사하므로 1빼야함
}
처음에 666을 기준으로 앞의 숫자와 뒤의 숫자가 6에 관련된 숫자가 될때
반올림을 하는 등의 규칙을 찾아 보려고 했으나 불가능하여 문제가 왜 이렇게 어렵지 라고 생각했다.
그러나 사실 그런 규칙을 찾는 문제가 아니라 단순히 숫자를 문자열로 변환하고,
문제가 원하는 조건 666이 들어간 숫자일경우 count 하는 단순한 문제 였다는 것을
알고서 나 자신이 너무 멍청해 보였다...
코드가 복잡하진 않지만
주의 해야 할 것은 조건에 맞는 숫자임을 확인하고 바로 break문을 사용하여 빠져 나와야 한다는 것이다.
예를 들어 6666의 경우 break를 걸지 않으면 두번 중복해서 세게 된다.
또한 마지막에 결과를 출력 할때, while 문을 빠져 나오기 위해 count가 하나 증가한 상태로 나오므로
출력시, 1을 빼주는 것도 주의할 점이였다.