파이톨치

[백준][python][1193] 분수찾기 본문

알고리즘

[백준][python][1193] 분수찾기

파이톨치 2021. 7. 7. 14:25
728x90

<참고>
이 문제는 다음과 같이 생각할 수도 있다.
1/1 은 좌표 (1,1)
1/2는 좌표 (1,2)
2/1은 좌표 (2,1)
사실 이 문제를 풀 때는 큰 도움이 되지 않는다고 생각한다. 
하지만 다음에 풀 N-Queen 문제에서 도움이 된다고 생각하여 적어 보았다.

<어떻게 풀까?>

본론으로 돌아서, 이 문제의 핵심은 분수의 분자와 분모의 합이 일정하다는 것이다. 

 

1번째 대각선에서는 합이 2,

2번째 대각선에서는 합이 3,

3번째 대각선에서는 합이 4,

 

이런식으로 진행된다.

또 하나의 문제는 지그재그라는 점이다. 이를 해결하기 위해서 나는 test라는 변수를 만들어서 홀수 번째 줄인지

짝수번째 줄인지 체크를 해 주었다.

 

<코드>

num = int(input())
test = 1
stack = 1
sum = 0

for i in range(1, num+1):
    sum = i+1
    if stack  <= num <= stack +i-1:
        what = num - stack + 1
        if test%2==1:
            print(f"{sum-what}/{what}")
            break
        else:
            print(f"{what}/{sum-what}")
            break
    stack += i
    test += 1

 

흠... 개발 초보자인 내가 보아도 그닥 예쁘지 않은 코드이다. 내가 만들었지만 정말 못 만들었다는 생각이 든다.

우선 간단하게 설명을 해보자.

 

test라는 변수를 만들어 홀수 번째 줄인지 짝수 번째 줄인지 체크해주었다.

stack이라는 변수를 만들어 몇 번째 대각선이지 체크를 해주었다.

sum이라는 변수를 이 대각선의 분모와 분자의 합을 체크해준다. (사실 별 필요 없다)

 

마지막으로 for 문을 통해서 진행을 시켜주었다. 

 

아무리 봐도 효율적인 코드라고 생각하진 않는다. 나는 어디까지나 초보자이기 때문에 나와 같은 초보자가 생각할 수 있는

코드라고 생각한다. 잘하시는 분들은 조언을 해주어도 좋다. 방법이 생각나지 않으신 분들은  <어떻게 풀까?>를 참고해서 만드시면 좋을 것이다.

728x90