https://www.acmicpc.net/problem/1065
1. 내가 작성한 코드
numbers = int(input())
count= 0
for num in range(1,numbers+1): #N보다 작거나 같은 수를 num에 차례로 넣음
if num < 100:
count += 1
else:
if ((num // 100) - ((num//10)%10)) == (((num//10)%10) - ((num%100)%10)):
count += 1
print(count)
2. 생각의 과정
1. 원래 num을 str으로 변환해서 쪼갠 후, 각각의 차이가 같으면 count에 1을 추가하는 방식으로 코딩을 하려했다.
ex) input(876) ---str으로 변환 후 반복문으로 쪼갬---> '8'(=a),'7'(=b),'6'(=c_ ---> int(a)-int(b) == int(b)-int(c) ---> count +=1
numbers = int(input())
count= 0
for num in range(1,numbers+1): #N보다 작거나 같은 수를 num에 차례로 넣음
if num < 100:
count += 1
else:
for i in str(num):
d = int(i) - (int(i)+1)
print(d)
(위는 오류나는 코드임,, 암튼 그럼,,아래에 해결 방법 있음,,)
2. 그런데 계속 오류가 떴다!
3. 어차피 1000보다 이하의 수가 주어진다고 조건에 나와있기 때문에 어차피 한 자리, 두 자리, 세 자리 수의 경우만 나누면 되는 상황 따라서 한 자리와 두 자리 수들은 그냥 한 수이기 때문에 count+=1 을 해줬고
4. 세 자리 수들은 아래와 같은 식을 이용해 나눠줬다.
((num // 100) - ((num//10)%10)) == (((num//10)%10) - ((num%100)%10))
ex) 867
8 => 867 // 100 , 숫자를 100으로 나누어준 몫
6 => (867 // 10) % 10
7 => (867%100) % 10
5. 이후 백의 자리 수 - 십의 자리 수에서 구한 차이와 십의 자리 수 - 일의 자리 수에서 구한 차이가 같을 경우 count 해주는 생각의 흐름으로 문제를 해결했다.
3. 문자열로 해결하는 방법
numbers = int(input())
count= 0
for num in range(1,numbers+1): #N보다 작거나 같은 수를 num에 차례로 넣음
if num < 100:
count += 1
else:
num_list = list(map(int, str(num)))
if num_list[1] - num_list[0] == num_list[2] - num_list[1]:
count += 1
print(count)
str(num) 으로 num을 나눈 후 => 다시 int로 변환해서 => 이걸 list에 넣는다.
'🔅코딩테스트 공부🔅 > ❗백준' 카테고리의 다른 글
[백준] 11654번 아스키 코드(with python) (0) | 2023.01.20 |
---|---|
[백준] 4673번 셀프 넘버(with python) (0) | 2023.01.19 |
[백준] 4344번 평균은 넘겠지(with python) (0) | 2023.01.18 |
[백준] 8958번 OX퀴즈(with python) (0) | 2023.01.18 |
[백준] 3052번 나머지(with python) (0) | 2023.01.18 |
댓글