1193번 : 분수찾기 문제
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
1/1 | 1/2 | 1/3 | 1/4 | 1/5 | … |
2/1 | 2/2 | 2/3 | 2/4 | … | … |
3/1 | 3/2 | 3/3 | … | … | … |
4/1 | 4/2 | … | … | … | … |
5/1 | … | … | … | … | … |
… | … | … | … | … | … |
이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로
1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/1193
풀이 코드
x = int(input())
line = 1
while x > line:
x -= line
line += 1
if line % 2 == 0:
a = x
b = line - x + 1
else:
a = line - x + 1
b = x
print(a, "/", b, sep="")
+ 문제 풀이 Point
분수들의 숫자가 지그재그 순서로 매겨지므로, 순서를 다음과 같이 나타낼 수 있음.
1번줄 : (1/1)
2번줄 : (1/2 , 2/1)
3번줄 : (3/1, 2/2, 1/3)
- n 번 줄은 n 개의 분수를 가지고 있음
- 홀수번째 줄에서는 분자가 오름차순, 짝수번째 줄에서는 분자가 내림차순
x = int(input())
- 첫째 줄에서 자연수를 입력받아, 변수 x 에 저장
- input() 은 한 줄의 문자열만 입력받을 수 있음
- 입력받은 문자열을 정수로 처리하기 위해 int() 함수를 사용
line = 1
- 입력받은 x 가 몇 번째 줄인지를 저장하는 변수 line
- 첫 번째 줄부터 시작하므로, 1로 초기화
while x > line:
- 입력받은 x 값이, 현재의 line 값보다 큰 경우 while 문을 반복
x -= line / line += 1
- n 번 줄은 n 개의 분수를 가지고 있음
- 따라서, x 값이 line 값보다 작거나 같아질 때 까지, line 수를 1씩 증가하며 빼줌
여기까지 x 가 몇 번째 줄에 있는지를 구했으면,
x 가 해당하는 줄에 몇 번째 순서에 있는지를 구해야 함.
이때, 홀수번째 줄에서는 분자가 오름차순, 짝수번째 줄에서는 분자가 내림차순
따라서 if 문으로 줄이 홀수일 때와 짝수일 때로 나누어야 함
if line % 2 == 0:
- 입력받은 x 가 있는 줄이 짝수 줄인 경우
a = x / b = line - x + 1
- 분자 값을 담는 변수 a : 앞서 line 을 모두 빼고 남은 나머지 수인, x 값과 동일
- 분모 값을 담는 변수 b : line 수에서 x 값을 뺀 후, 1을 더해주어야 함
else:
- 입력받은 x 가 있는 줄이 홀수 줄인 경우
a = line - x + 1 / b = x
- 분자 값을 담는 변수 a : line 수에서 x 값을 뺀 후, 1을 더해주어야 함
- 분모 값을 담는 변수 b : 앞서 line 을 모두 빼고 남은 나머지 수인, x 값과 동일
print(a, "/", b, sep="")
- 분자 a 를 먼저 출력한 후, 분모 b 를 출력
- sep 은 구분자 역할로, print 문의 출력문들 사이에 sep 에 해당하는 내용을 출력
(옵션을 사용하지 않을 경우, default 값은 공백)
나동빈 '이것이 코딩 테스트다 with 파이썬' 책을 참고하여 작성하였습니다.
https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC
'백준 알고리즘 문제 풀이 [Python]' 카테고리의 다른 글
[백준/Python] 10250번 ACM 호텔 (기본수학1) (0) | 2023.02.23 |
---|---|
[백준/Python] 2869번 달팽이는 올라가고 싶다 (기본수학1) (0) | 2023.02.23 |
[백준/Python] 2292번 벌집 (기본수학1) (0) | 2023.02.23 |
[백준/Python] 1712번 손익분기점 (기본수학1) (0) | 2023.02.23 |
[백준/Python] 1316번 그룹 단어 체커 (문자열) (0) | 2023.02.23 |