https://www.acmicpc.net/problem/1436
> 완전탐색
문제 내용 그대로 이해한 바를 코드로 옮기면 다음과 같다.
최소 수인 666부터 시작해서 1씩 더한 수를 문자화한다. 해당 문자가 문제 조건인 '666'을 포함하는 수들이면 lst안에 추가하고 lst 안에 추가된 요소의 개수가 n이면 반복문을 중단한다.
* 해당 코드는 말그대로 완전 탐색으로 처음부터 끝까지 모든 수들을 문자화하고 조건문에 넣기 때문에 굉장히 시간 비효율적이다.
▶ 배운 점
맞힌 사람의 코드를 쭉 둘러보다가 인상깊은 코드를 발견했다. 해당 코드에선 while 내부에서 여러 개의 조건문을 사용하여 모든 수를 탐색하지 않아도 조건에 해당하는 수를 lst에 추가할 수 있도록 했다. 6661,6662와 같이 1의 자리 수가 변화할 때, 66612, 66613과 같이 10의 자리 수들이 변화할 때, 666122,666123과 같이 100의 자리 수들이 변화할 때, 6661222,6661223과 같이 1000의 자리 수들이 변화할 때를 조건문으로 분기하였다는 점이 인상깊었다.
해당 코드를 작성하신 분은 '수를 문자로 바꾸는 과정이 없고, 수 연산만으로 문제 조건을 맞춤 + 처음부터 끝까지 모든 수를 탐색하지 않아도 됨'이라는 점이 시간을 단축시킬 수 있는 주 요인이라고 생각하신듯 하다. 내가 작성한 코드가 아니기 때문에 포스팅으로 가져오진 않았지만 해당 포스팅 글을 읽고 이 코드가 궁금하신 분들은 agent227님이 작성하신 코드를 참고하면 될 듯하다.
포스팅에서 틀린 부분에 대한 피드백은 언제나 환영입니다!!
'python > 알고리즘 문제풀이' 카테고리의 다른 글
[백준 | 파이썬3] 10866 덱 - 덱 (1) | 2021.12.02 |
---|---|
[백준 | 파이썬3] 1181. 단어정렬 - 정렬 (2) | 2021.12.02 |
[백준 | 파이썬3] 10872. 팩토리얼 - 재귀 (2) | 2021.11.30 |
[백준 | 파이썬3] 11651. 좌표 정렬하기2- 정렬 (0) | 2021.08.20 |
[백준 | 파이썬3] 1012. 유기농 배추- dfs (2) | 2021.08.20 |