Hyunseok
현재 사이트는 2024년 11월 이후로 업데이트 되지 않습니다. 새 글은 블로그로 확인해주세요. 블로그로 이동
프로그래밍/파이썬 [파이썬] 1193 분수찾기 feat 멍청멍청
2022. 1. 25. 03:54

현재 사이트는 2024년 11월 이후로 업데이트 되지 않습니다. 새 글은 블로그로 확인해주세요. 블로그로 이동

여태 수학 문제들을 미뤄뒀었다

하지만 쌓이는 문제들을보니 .. 더 이상 미뤄둘 수는 없다 생각

그래서 하나하나 풀기 시작했다

 

수학1에 들어가 보니...

 

그래도 단계별 문제를 보지 않고 무작정 풀었던 문제들 중에 수학 문제가 끼어있었나 보다 

안 풀린 문제가 이 문제와 설탕 배달, 알파센츄리 문제였다.. 

일단 이게 제일 쉬워 보였으니 이문제부터 풀려했다

 

 

 

-

 

 

문제부터 보자 

정말 거짓말 하나 안 보태고 보자마자 숨이 턱 막혔다

 

정말 한 10분은 저 예제 표만 본 것 같다

 

그러던 도중에 규칙을 발견했다

 

 

대각선을 잘 보면

 

두 번째 대각선은 1/2~2/1

 

세 번째 대각선은 3/1~1/3

 

"대각선" 은 분모 혹은 분자의 최댓값

방향은 홀수 혹은 짝수에 따라 결정된다는 걸 알 수 있다

 

그럼 이 문제에서 알야 할 2가지 조건은 알아냈고..

 

나머지 문제인

 

대체 주어진 수는 어느 줄에서 나오는가?이다

 

요것도 머리를 조금 굴렸다

 

이런 문제로 머리를 굴려야 한다니 나이를 통감한다..

 

 

생각해보는 것보단 그냥 쓰면서 하는 게 나아 보여 한 번 써서 찾아보기로 했다 

 

 

# 1>1

# 2
# 2>3

# 3
# 3>6

# 4
# 4>10

# 5
# 5>15

# 6
# 6>21 

..

 

매우 익숙하다 

두 변수를 잡았을 때

 

1번 줄은 1개

2번 줄은 1번줄총합과 2번줄 총합

3번 줄은 1,2,3 총합..

 

결국 찾고자 하는 수는

 

어느 줄의 총합의 아래에 있을터

 

그럼 간단하다

 

0부터 시작해서

 

0일 때 총합 (0)(이하 tempnum) 그리고

다음 줄이라는 걸 알려줄 변수에 +1(이하 tmp)

 

1일 때 총합 tempnum + tmp

 

그리고 안 넘으면 다시 tmp에 +1..

 

이걸 반복하다 보면

 

우리가 입력받은 수를 넘는 tempnum값을 찾을 수가 있다

 

그럼 넘는 순간 멈추면 tmp 값은 그 수의 대각선의 값이다

 

바로 값으로 옮겨보자

num = int(input())
tempnum = 0 
tmp=0 
while(1):
    tempnum = tmp+tempnum
    if tempnum>=num:
        break
    tmp+=1

where = tempnum - num

if tmp %2 !=0:
    print(str(1+where)+"/"+str(tmp-where))
else:
    print(str(tmp-where)+"/"+str(1+where))

매우 적절한 코드가 나왔다

 

수를 받아와 num으로 선언

받은 수가 들어갈 그 대각선 줄의 최댓값 = tempnum

받은 수가 들어갈 그 대각선의 값 =  tmp

 

먼저 앞에서 언급한 대로 tempnum과 tmp를 구한다

 

백준에 올라가 있는 마지막 예시 기준으로 14인 경우에는 

 

tempnum, tmp, num = 15, 5, 14이다

 

그럼 이 수를 가져와서 

 

where이라는 변수를 만들 텐데

말 그대로 입력받은 num은 몇 번째에 있는지 알아내는 변수이다

 

간단하다 그냥 최댓값에 입력받은 num값을 빼면 몇 번째 수인지 알 수 있다

 

 

 

그렇게 뺀 수를 가져와서 앞서 언급한 방향을 알아내야 한다 

 

짝수일 때는 tmp값이 분모로 시작해서 1씩 줄어들고 결국 분자가 될 것이고

 

홀수일 때는 그 반대일 것이다 

 

간단하게 출력을 위해 where을 str로 만들어 슬래쉬와 붙여준다

 

아, 그전에 뺀 수는 0부터 센 수이므로 +1을 해준다

 

 

 

그럼 답이 톡 하고 튀어나오는 걸 볼 수가 있다

 

 

 

-

 

역시 시간이 지나니 무쇠덩이 던 게 약간 무른 쇠로 변했나 보다

 

단계별 올라갈 때는 눈길조차 안 가던 문제인데..

 

결국 풀리는 거 보니 그래도 시간이 약인가 보다 


프로그래밍/파이썬의 다른 글