본문 바로가기

Python(알고리즘,문제풀이)/BOJ (Bronze III)

백준 1598번 / 꼬리를 무는 숫자 나열 - 파이썬

728x90

📚문제

출처 : 백준 1598번(https://www.acmicpc.net/problem/1598)

 

📝풀이

# 내코드 - 오답코드

# 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을 뺴줘야하는건지 잘 이해가 안 갔는데

여러 풀이를 보다가 그래도 알아듣기 쉽게 설명한 분이 있어서 참고했다

출처 :  https://begin-dev-awos.tistory.com/182

 

 간단히 말하면 왼쪽 위를 (0,0)으로 설정했는데 

시작하는 숫자판이 1이기 때문에 맞춰주기 위해 x좌표와 y좌표 모두에 -1을 해주는 것 같다

예를 들면

발그림 죄송...

11과 25를 생각했을 때

1씩 빼주게 된다면

좌표평면 상에 있다고 생각했을 때 

값이 딱 맞게된다

 

+ 이렇게 다 생각해서 풀이 하시는 분들 대단...

 

728x90