728x90
https://www.acmicpc.net/problem/1193
문제
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
1/1 | 1/2 | 1/3 | 1/4 | 1/5 | ... |
2/1 | 2/2 | 3/2 | 4/2 | ... | ... |
3/1 | 3/2 | 3/3 | ... | ... | ... |
4/1 | 4/2 | ... | ... | ... | ... |
5/1 | ... | ... | ... | ... | ... |
... | ... | ... | ... | ... | ... |
입력
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
출력
첫째 줄에 분수를 출력한다.
코드 정답
input_num = int(input())
line = 0 # 사선 라인, 입력받은 정수가 몇 번째 라인에 있는지 알아내는 용도
max_num = 0 # 입력받은 정수가 있는 사선 라인에 위치한 정수 중 가장 큰 정수를 찾아내는 용도
while input_num > max_num:
line += 1
max_num += line
a = max_num - input_num
if line % 2 == 0: # 사선 라인이 짝수번째 일 때
top = line - a # 분자
under = a + 1 # 분모
else: # 홀수번째 일 때
top = a + 1 # 분자
under = line - a # 분모
print(f'{top}/{under}')
풀이
1행 : 문자를 입력받아 정수형으로 바꿔 input_num 에 저장한다.
2행 : 변수 line 에 정수값 0 을 넣어준다.
3행 : 변수 max_num 에 정수값 0 을 넣어준다.
5행 : 입력한 값이 max_num 보다 클 경우 6~7 행을 반복하다 조건이 틀리게 될 시에 중지한다.
6행 : line = line + 1 로 실행할 때마다 1 씩 증가하게 된다.
7행 : max_num = max_num + line 으로 실행할 때마다 line 에 저장된 값을 max_num 의 값과 더해 저장한다.
9행 : max_num 에서 input_num 의 값을 빼낸 값을 a 에 저장한다.
11행 : line 을 2 로 나누었을 때 나머지가 0이라면 12~13행을 실행한다.
12행 : line 에서 a 를 빼낸 값을 top 에 저장한다.
13행 : a 에 1을 더한 값을 under 에 저장한다.
14행 : 11 행의 경우가 아닐 경우 15~16행을 실행한다.
15행 : a 에 1 을 더한 값을 top 에 저장한다.
16행 : line 에 a 를 빼낸 값을 under 에 저장한다.
17행 : f-string 문법을 사용하여 값을 출력한다. top 에 3, under 에 1이 저장되어 있을 경우 3/1 이 출력된다.
728x90
'BaekJoon > 단계별로 풀어보기' 카테고리의 다른 글
[백준] 기본 수학 1 - 10250번 (Python) (0) | 2022.12.01 |
---|---|
[백준] 기본 수학 1 - 2869번 (Python) (0) | 2022.11.30 |
[백준] 기본 수학 1 - 2292번 (Python) (1) | 2022.11.29 |
[백준] 기본 수학 1 - 1712번 (Python) (0) | 2022.11.29 |
[백준] 문자열 - 1316번 (Python) (0) | 2022.11.28 |