
소속중인 A&I 동아리에서 코딩역량을 강화하고자
코딩캠프를 진행하며 작성한 포스트입니다.
해당 포스트는kotlin을 기반으로 작성합니다.
이번 주 주제는 구현입니다.
백준에 하루 한 문제를 풀어가며 작성할 것입니다.
https://www.acmicpc.net/problem/1193

이 문제는 위 분수 배열에서 지그재그로 번호를 부여할 때 내가 원하는 번호의 분수를 구하는 문제입니다.
- 입력을 받아줍니다.
- 위 배열의 규칙을 알아야 합니다.
2-1. 첫 번째로 분자 분모의 합이짝수,홀수를 번갈아 갈때마다 열이 변합니다.
2-2. 열의 순번의 끝을 더하면3, 6, 10, 15등등1부터 열의 순번까지를 더한 수가 나옵니다.
2-3 만약홀수열의 경우 첫 번째 분수에서 마지막 분수가 될수록분자는 감소하고분모는 증가합니다.
반대의 경우짝수는분자는 증가하고분모는 감소합니다.- 그래서 열의 순번을 구해줄
tmp와 분자 분모의 합sum을 넣어준 뒤
반복문을 통해 해당 숫자가 몇 번째 열에 있는지 구합니다.- 열을 구했다면 수를 2로 나눠 만약
짝수면top에tmp(열의 순번) - x(내가 받은 숫자) + 1을 통해
분자를 구해주고bottom에는sum에top을 빼주는 식으로 분모를 구합니다. 홀수는 반대로 구해줍니다.
(1을 더해주는 이유는 분자 분모가 1/1부터 시작하기 때문입니다.)- 이후 top/bottom을 불러 출력해줍니다.
import java.io.StreamTokenizer
fun main() = with(StreamTokenizer(System.`in`.bufferedReader())){
fun nextInt() : Int { nextToken(); return nval.toInt() }
val x = nextInt()
var top = 0
var bottom = 0
//열의 순번
var tmp = 0
//분자 분모의 합
var sum = 1
while(tmp < x){
tmp += sum
sum++
}
if(sum % 2 == 0){
top = tmp - x + 1
bottom = sum - top
} else {
bottom = tmp - x + 1
top = sum - bottom
}
println("$top/$bottom")
}
