어제 답안까지 봤던 문제를 오늘 아침에 다시 풀어도 못 맞추는 건 무슨 빡대가리일까?
1. 내 풀이
n = int(input())
count = 0
for i in range(n):
for j in range(60):
for k in range(60):
if '3' in str(i) or str(j) or str(k):
count += 1
print(count)
2. 정답
n = int(input())
count = 0
for i in range(n+1):
for j in range(60):
for k in range(60):
if '3' in str(i) + str(j) + str(k):
count += 1
print(count)
3. 깨닫거나 다시 공부하게 된 점
- 처음 문제를 풀 때 3중 for문을 생각하긴 했으나, 시간 및 메모리 제한 때문에 그 방법을 포기했었다.
- 하지만 만약 데이터 수가 충분히 작다면 완전탐색 유형으로 생각해보는 것도 낫밷
- range()는 0부터 괄호 안에 들어가는 수 이전까지의 숫자들을 리턴한다.
- 왜 60은 잘만 넣었으면서 n+1은 생각 못한거니?
- 굳이 리스트로 묶지 않아도 + 연산자를 통해서 문자열을 하나로 붙일 수 있다. 기억하자...
- or 연산자에 대한 좀 더 깊은 이해
- or은 논리 연산자! 즉, if '3' in str(i) or str(j) or str(k)는 'str(i)에 숫자 3이 있거나 또는 문자형이거나 문자형이니?'가 됨
- 내가 원래 의도했던 대로 코드를 짜려면 if '3' in str(i) or '3' in str(j) or '3' in str(k)로 짰어야 함
- 관련 설명 글 링크(https://arainablog.tistory.com/136)
'CS > 알고리즘' 카테고리의 다른 글
[이코테] DFS, BFS - 음료수 얼려먹기 (0) | 2023.02.02 |
---|---|
[이코테] 구현 - 문자열 압축 (0) | 2023.01.29 |
[이코테] 구현 - 문자열 재정렬 (0) | 2023.01.28 |
[이코테] 구현 - 럭키 스트레이트 (0) | 2023.01.27 |
[이코테] 구현 - 왕실의 나이트 (0) | 2023.01.26 |