https://www.acmicpc.net/problem/1193
풀이 과정
풀이 과정
- 나의 풀이
이게 나만의 팁인지 아닌지는 모르겠지만.. 알고리즘 문제 중에서 분류가 '수학'인 문제를 풀 때는 '규칙' 찾기에 집념해야하는 것 같다. 물론 뭐... 규칙 없는 알고리즘이 어딨냐고 하면 또 할 말이 없지만.. 수학 문제는 좀 더 중요하다는 말이다 쨋든..!!
그래서 이 문제의 규칙을 내가 어떻게 찾았는지 한번 알아보자.
문제에서 분수의 배열은 표에서 지그재그식으로 움직이며 배열됨을 알 수 있다.
간단하게 써보면 다음과 같다.
● 분수의 배열
첫번째 줄 : 1/1
두번째 줄 : 1/2 2/1
세번째 줄 : 3/1 2/2 1/3
네번째 줄 : 4/1 3/2 2/3 1/4
다섯번째 줄 : 5/1 4/2 3/3 2/4 1/5
...
뭔가 규칙이 보이는 것 같다..!! n번째 줄의 배열에는 n개의 수가 있고 n이 짝수인 경우 분자가 오름차순, 분모가 내림차순인 반면 n이 홀수인 경우 분모가 내림차순, 분모가 오름차순이다. 몇 번째 줄인지에 대해 규칙을 찾았으니 입력되는 값에 의해 몇번째 줄의 몇번째 위치 수인지만 알아내면 될 듯하다...!
입력되는 값은 전체 배열의 몇번째 숫자인지에 대한 위치값이다. 따라서 이 입력값으로 몇번째 줄 몇번째 위치인지 알아내는게 관건이다.
아래 내가 작성한 코드를 보자.
# 1193 분수 찾기
import sys
input = sys.stdin.readline
n = int(input())
line = 1
while n > line :
n -= line
line += 1
if line % 2 == 0 :
num1 = n
num2 = line - n + 1
elif line % 2 == 1 :
num1 = line - n + 1
num2 = n
print(num1,'/',num2,sep = "")
n 값에 line값을 1,2,3....씩 빼주면 몇 번째 줄 숫자인지 line값에 나타나고 n값은 그 줄에서 몇번째 숫자인지를 나타낸다.
출력은 sep함수를 이용하자..!!
후기
수학 문제는 규칙만 찾으면 어렵지 않지만 규칙이 안 보이면 정말 어렵고 짜증난다.
'Algorithm > math' 카테고리의 다른 글
[백준] 9613 GCD 합 (파이썬 Python) (0) | 2021.08.13 |
---|---|
[백준] 13241 최소공배수 (파이썬 Python) (0) | 2021.08.13 |
[백준] 1934 최소공배수 (파이썬 Python) (0) | 2021.08.13 |
[백준] 2702 초6 수학 (파이썬 Python) (0) | 2021.08.13 |
[백준] 1011 Fly me to the Alpha Centauri (파이썬 Python) (0) | 2021.07.08 |