안경잡이 구루루

백준 1193 (분수찾기) [Python/파이썬] [Implement/구현] 본문

파이썬(Python)/문제풀이(백준,BaekJoon)

백준 1193 (분수찾기) [Python/파이썬] [Implement/구현]

구루루(gururu) 2023. 10. 14. 16:17
반응형

https://www.acmicpc.net/problem/1193

 

1193번: 분수찾기

첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.

www.acmicpc.net


나:

cnt = 1
parents =0
ex_parents = parents
fraction = []

x = int(input())

while True:
    parents += cnt
    if parents >= x:
        break
    else:
        cnt +=1
        ex_parents =parents
if cnt % 2 == 0:
    for i in range(1,cnt+1):
        fraction.append(str(i)+'/'+str(cnt-i+1))
else:
    for i in range(cnt,0,-1):
        fraction.append(str(i)+'/'+str(cnt-i+1))
print(fraction[x-ex_parents-1])

완성된 코드는 위와 같다.

 

(1)
cnt = 1
parents =0
ex_parents = parents
fraction = []

x = int(input())

필요한 변수들을 우선 선언했다.

cnt 는 X번쨰 분수를 보함하는 배열의 끝 분수의 분모 혹은 분수의  큰 값을 의미(ex. X=4  -->  3/1,2/2,1/3 의 배열의 끝 분수 3/1, 1/3 의 분모,분수의 큰값 3을 의미)

parents는 나중에 입력값 x와 비교해 최종 cnt 값을 정해주는 역할 수행

ex_parents는 이전의 parents 변수 값을 담았다. 

fraction은 X번째 분수를 포함하는 같은 배열의 분수들을 넣을 리스트다.

첫째 줄에는 몇번 째에 해당하는 x 값을 입력받았다. 

 

(2)
while True:
    parents += cnt
    if parents >= x:
        break
    else:
        cnt +=1
        ex_parents =parents

두번째로 x 번쨰 분수를 포함하는 배열들에 해당하는 분수들을 모두 찾기 위해 코드를 작성했다.

그러기 위해 x 번쨰 분수를 포함하는 배열의 가장 분수, 죽 가장 끝 분수인 기준분수를 찾아야 하고 이를 반복문을 whlle 을 이용해 구현했다.

반복문 과정 중에 parents는 1+2+3+4+,,,,n 을 더해가며 커진다. 즉, cnt 값을 더해가며 커진다.이때 입력값이었던 x 와 비교한다.

cnt 를 더해가다 parents >= cnt 이면 x 번쨰 분수를 포함하는 배열들에 해당하는 기준 분수의 분모 혹은  분자는 cnt 가 된다.이때 parents는 x 보다 크기 때문에 이후 fraction에 담긴 분수를 출력해 0부터 사작하는 index의 역할을 못한다고 판단해 이전의 parents 값을 ex_parents에 담았다.

 

(3)
if cnt % 2 == 0:
    for i in range(1,cnt+1):
        fraction.append(str(i)+'/'+str(cnt-i+1))
else:
    for i in range(cnt,0,-1):
        fraction.append(str(i)+'/'+str(cnt-i+1))
print(fraction[x-ex_parents-1])

지그재그 순서대로 분수가 출력되기에 짝수, 홀수 번째 배열인지에 따라 출력양식이 달라진다. 

그래서 %2 ==0 :짝수 에 해당하는 경우와 이외인 홀수의 경우에 따라 알맞은 분수 형태들을 만들고 이를 fraction 리스트에 저장했다.

최종적로 x 번째 배열이 모인 fraction 리스트에 ex_parents 값을 뺴주고 이떄 index가 0부터 시작하기 때문에 -1 을 추가로 뺀 값을 출력시킨다.


다른사람:

num = int(input())
ex = 1

while num > ex:
    num -= ex
    ex += 1

if ex % 2 == 0:
    a = num
    b = ex - num + 1
else:
    b = num
    a = ex - num + 1


print('{}/{}'.format(a,b))

완성된 코드는 위와 같다.

1  더해가는 방식이 아닌 빼는 방식으로 구현해 최소한의 변수를 사용

2.  x번째 분수가 해당하는 배열들의 분수들을 모두 찾지 않고 바로 x번째 분수를 구할 수 있게 구현

에 집중하여 코드를 살펴 볼 필요가 있다.

반응형