6이 3개이상 연속으로 들어가는 수를 찾는 문제다. 무한 루프 반복문을 돌려서 6이 3개이상 연속으로 들어가는 수를 cnt해주면서 구하려는 값이 되면 반복문을 탈출해주면 되겠다.
i를 1부터 계속 증가시켜주고 i를 문자열로 바꾼 뒤 그 문자열에 666이 있으면 cnt를 1씩 더해주는 식으로 풀면 되겠다.
파이썬은 다양한 기본 함수가 있어서 find함수를 써서 쉽게 풀 수 있었다.
예전에 C로 풀었던 코드를 보면, 666부터 시작해서 1씩 증가시켜주면서 연산을 위한 End_safe에 값을 넣어주고 End_safe를 나눠주면서 cnt가 3이면(6이 연속 3번 나오면) right를 1씩 더해주는 식으로 코드를 짰다.
#파이썬 코드
##변수 선언 부분
cnt = 0
is_right = 0
##메인 함수 부분
if __name__ == "__main__":
data = int(input())
i = 1
while True:
N = str(i)
is_right = N.find('666')
if is_right != -1: #만약 is_right가 -1이면 문자열 안에 '666'이 없다는 뜻이므로
cnt += 1 #있으면 cnt + 1
if cnt == data:
print(i)
break
i += 1
//C 코드
#include <stdio.h>
int main(){
int N,i,j,cnt=0,End=666,End_safe,right=0;
scanf("%d",&N);
while(1){
End_safe=End;
cnt=0;
while(End_safe!=0){
if(End_safe%10==6){
cnt++;
}
else
cnt=0;
End_safe/=10;
if(cnt==3){
right++;
break;
}
}
if(right==N){
printf("%d",End);
break;
}
End++;
}
return 0;
}
파이썬의 힘을 느낀 문제였다. 정수를 나누면서 비교하는 것이 아닌 그냥 문자열로 바꾼 뒤 find함수로 찾아주면 됐다.
C로 풀었을 때도 그렇게 어렵지 않았던 문제였던 것 같다.
'백준 문제풀이(파이썬) > 브루트 포스' 카테고리의 다른 글
백준 1018번 - 체스판 다시 칠하기 (0) | 2021.05.28 |
---|