728x90
📚문제
📝풀이
# 내코드 - 오답코드
# 1598번 꼬리를 무는 숫자 나열
a,b = map(int,input().split())
# a,b 같은 라인일때
if a%4==b%4:
print(abs(a-b)//4)
# a,b 나머지 차이가 1일때
elif (a%4==0 or b%4==0) and abs(a%4 - b%4)==1 :
if a%4 - b%4 <0:
print(abs(a-b)//4 + 4)
else:
print(abs(a-b)//4 + 3)
elif (a%4!=0 and b%4!=0) and abs(a%4 - b%4)==1 :
if a%4 - b%4 <0:
print(abs(a-b)//4 + 1)
else:
print(abs(a-b)//4 + 2)
# a,b 나머지 차이가 2일때
elif (a%4==0 or b%4==0) and abs(a%4 - b%4)==2 :
if a%4 - b%4 <0:
print(abs(a-b)//4 + 3)
else:
print(abs(a-b)//4 + 2)
elif (a%4!=0 and b%4!=0) and abs(a%4 - b%4)==2 :
if a%4 - b%4 <0:
print(abs(a-b)//4 + 2)
else:
print(abs(a-b)//4 + 3)
# a,b 나머지 차이가 3일때
elif abs(a%4 - b%4)==3:
if a%4 - b%4 <0:
print(abs(a-b)//4 + 2)
else:
print(abs(a-b)//4 + 1)
거의 노가다긴 하지만 경우의 수 다 고려했고
숫자 판에서 보이는 숫자들로 해봤을 때 다 잘 나와서 왜 틀린지 모르겠다
(a>b인 경우는 답이 이상하게 나오는데
당연히 a가 b보다 작을거라 생각한것같다
그럴 경우를 고려하지 않아서 틀린 것 같기도 하다)
숫자가 10,000,000까지 가기 때문에 반복문은 절대 아닐거고
구글링 해보니 좌표로 해결한 풀이가 많았다
a, b = map(int, input().split())
print( abs((a-1)//4 - (b-1)//4) + abs((a-1)%4 - (b-1)%4) )
왜 근데 1을 뺴줘야하는건지 잘 이해가 안 갔는데
여러 풀이를 보다가 그래도 알아듣기 쉽게 설명한 분이 있어서 참고했다
간단히 말하면 왼쪽 위를 (0,0)으로 설정했는데
시작하는 숫자판이 1이기 때문에 맞춰주기 위해 x좌표와 y좌표 모두에 -1을 해주는 것 같다
예를 들면
11과 25를 생각했을 때
1씩 빼주게 된다면
좌표평면 상에 있다고 생각했을 때
값이 딱 맞게된다
+ 이렇게 다 생각해서 풀이 하시는 분들 대단...
728x90
'Python(알고리즘,문제풀이) > BOJ (Bronze III)' 카테고리의 다른 글
백준 2010번 / 플러그 / 파이썬 (1) | 2023.11.03 |
---|---|
백준 1837번 / 암호제작 / 파이썬 (브루트포스 알고리즘 / 큰 수 연산) (0) | 2023.11.03 |