For Programmer
백준 1748번 파이썬 문제풀이(브루트 포스 - 수 이어 쓰기1) 본문
728x90
이문제는 코드보다 밑에 설명을 먼저 읽어보고 나서 코드를 보는 것을 추천한다. 기본적으로 문제를 풀기 위해 식이 어떠한 루틴으로 반복되는지를 알아야 한다.
코드
n = int(input())
result = 0 #결과값 출력을 위한 변수
plusNum = "9" #더해줄 값을 9로 선언
minusNum = "" #빼줄 값을 빈 문자열로 선언
if len(str(n)) > 1: #만약 길이가 1이상이라면
for i in range(1,len(str(n))+1): #입력받은 수의 길이만큼 돈다
if i != len(str(n)): #만약 입력받은 str의 길이가 i랑 같지 않다면
result += (i * int(plusNum)) #result값에 i값과 plusnum(9,90,900.....) 곱한 값을 더해준다.
elif i == len(str(n)): #만약 i가 n의 길이에 도달했다면
result += ((n - int(minusNum)) * i) #result값은 (입력받은 수에서 minusnum(9,99,999...)를 빼준다.)
minusNum += "9" #minusNum에 9를 계속 추가
plusNum += "0" #plusnum에는 0을 추가
else: #길이가 1이라면
result = n #n값을 결과값에 대입
print(result)
-> 우선 간단하게 설명하자면 1~9까지는 그냥 입력받은 n *1 한 값이 출력값이다. 그렇다면 10~99까지는 어떻게 계산이 될까. 10~99까지는 앞서 구한 9 + (n-9) *2 이다. 100~999는 9 + 90*2 + (n-90-9) * 3 이다. 1000~9999는 9 + 90*2 + 900*3 + (n-900-90-9) * 4이다. 즉 이런식으로 식이 나오는데 이를 코드로 정리하면 위와 같다.
이 문제도 숫자들을 쭉한번 적어놓고 일정하게 반복되는 식만 찾으면 금방 풀 수 있다. 물론 그 식을 깔끔하게 찾아 코드로 옮기기까지 적지않은 시간이 소요된다 ㅎㅎ
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
백준 15649번 파이썬 문제풀이(브루트 포스 - N과M(1)) -재귀 이용 (0) | 2021.10.17 |
---|---|
백준 9095번 파이썬 문제풀이(브루트 포스 - 수 이어 쓰기1) (0) | 2021.10.16 |
백준 6064번 파이썬 문제풀이(브루트 포스 - 카잉 달력) - 쉽게설명 (1) | 2021.10.16 |
백준 14500번 파이썬 문제풀이(브루트 포스 - 테트로미노) (0) | 2021.10.15 |
백준 1107번 파이썬 문제풀이(브루트 포스 - 리모컨) (0) | 2021.10.15 |
Comments