분수찾기(1193번)

PearLine_Zero·2024년 3월 29일

하루에 1커밋 CodingTest

목록 보기
69/110
post-thumbnail
  • 티어 : Silver 5
  • 정답여부 : 오답
  • 알고리즘 유형 : 수학, 구현
  • 시간 제한 : 0.5초

💡문제

무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.

X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.

💡입력

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

💡출력

첫째 줄에 분수를 출력한다.

💡예제 입력 1

1

💡예제 출력 1

1/1

💡예제 입력 2

2

💡예제 출력 2

1/2

💡예제 입력 3

3

💡예제 출력 3

2/1

💡예제 입력 4

4

💡예제 출력 4

3/1

💡예제 입력 5

5

💡예제 출력 5

2/2

💡예제 입력 6

6

💡예제 출력 6

1/3

💡예제 입력 7

7

💡예제 출력 7

1/4

💡예제 입력 8

8

💡예제 출력 8

2/3

💡예제 입력 9

9

💡예제 출력 9

3/2

💡예제 입력 10

14

💡예제 출력 10

2/4

💡문제요약

입력받은 숫자에 분수를 추력하면 되는 수학 문제

💡알고리즘 설계

일단 규칙을 알아야 한다.
첫줄 1은 1/1
두번째 2는 1/2 3은 2/1
세번째 4는 3/1 , 5는 2/2 6은 1/3
네번째 7은 1/4 8은 2/3 9는 3/2
여기서 규칙은 홀수라인은 분자가 +1 분모가 -1 짝수라인은 분자 -1 분모가 +1씩 되는 규칙이다.
1. 입력받은 숫자의 몇번쨰 라인인지 먼저 확인
2. 그 라인이 짝수이면 분모에 n을 넣어주고 line에 n을 빼서 1를 더해줌
3. 홀수 라인인 경우 반대로 진행

💡작성코드

  • python
n = int(input())
line = 1
while n > line:
    n -= line
    line += 1    
if line % 2 == 0:
    a = n
    b = line-n+1
else:
    a = line-n+1
    b = n
print(a, '/', b, sep='')

💡틀린 이유 or 수정할 부분

사실 이 문제는 하루종일 봐도 코드를 못 쳐서 다른사람 풀이를 보고 이해를 하고 푼 문제이다 조금 더 간단한 풀이방식도 있어서 한번 가져옴!

💡틀린 부분 수정 or 다른풀이

  • python
n = int(input())
i = 0
while n > 0:
i += 1
n -= i
if i % 2 ==0:
	print(f'{i+n}/{1-n})
else:
	print(f'{1-n}/{i+n})

💡느낀점 or 기억할 정보

https://sinabro95.tistory.com/170
https://longflash.tistory.com/685
나에게 이해의 도움을 주신 코드..ㅎㅎ

profile
https://baesaa0304.tistory.com 블로그 이사합니다~

0개의 댓글