728x90
#1193 분수찾기
문제를 보자마자 짜본 단순한 코드
import sys
input = sys.stdin.readline
numer_list = []
denom_list = []
numer = 1
denom = 1
trigger = 0
n = int(input())
for i in range(n):
numer_list.append(numer)
denom_list.append(denom)
if (numer == 1) and (trigger == 0):
denom += 1
trigger = 1
elif (denom == 1) and (trigger== 0):
numer += 1
trigger = 1
else:
if (numer + denom) % 2 == 1:
numer += 1
denom -= 1
if denom == 1:
trigger = 0
else:
numer -= 1
denom += 1
if numer == 1:
trigger = 0
print(str(numer_list[n-1]) + '/' + str(denom_list[n-1]))
특별한 고민없이 분수가 변화하는 모습을 규칙에 따라 분자 분모로 따로 나누어 리스트에 담았다. 특징적인 점은 변에서 분자나 분모에만 1을 더하는 경우를 결정하기 위하여 trigger를 이용하였다.
그러나 너무 러프한 하드코딩이어서 그런지 시간초과가 나왔다. 추가적으로 고민을 해보고 새로운 코드를 완성하였다.
새로운 코드
import sys
input = sys.stdin.readline
n = int(input())
line = 1
#n이 line보다 클때까지 반복하여 n이 몇번째 line인지,
#그 line에서 n이 몇번째 수인지 조사
while n > line:
n -= line
line += 1
#n이 포함된 line이 짝수 라인인지 홀수 라인인지에 따라 구분
if line % 2 == 0:
numer = n
denom = line - n + 1
else:
numer = line - n + 1
denom = n
print(numer,'/',denom, sep="") #sep=""이용하여 문자간 공백 제거
몇번째 line인지와 해당 라인에서 몇번째 숫자인지를 각각 line, n에 넣어주고 해당 값을 이용하여 간단한 연산을 통해서 분자(numerator), 분모(denominator)를 numer과 denom변수에 저장하여 출력하는 방법을 선택하였다. 마지막으로 출력파트에서 숫자를 string으로 바꾸는 것이 아니라 sep=""이라는 공백을 지우는 좋은 방법을 이용하였다.
728x90
'Sketch (Programming Language) > Python' 카테고리의 다른 글
Baekjoon Training #1759 (2) | 2023.02.09 |
---|---|
식단 평가 프로그램 (Back-end 연결을 중심으로) (0) | 2023.02.08 |
Baekjoon Training #10844 (3) | 2023.02.02 |
Baekjoon Training #2579 (0) | 2023.01.31 |
Baekjoon Training #9461 (2) | 2023.01.29 |