https://www.acmicpc.net/problem/1193
나의 답
import sys
N = int(sys.stdin.readline())
cnt = 0
i = 1
while (True):
cnt+=i
if cnt>=N:
break
i+=1
start = i+N-cnt
end = i- start+1
if i %2 == 0:
print(f"{start}/{end}")
else:
print(f"{end}/{start}")
1 / 1 => 2의 합 : 1개
1 / 2 , 2/ 1 => 3의 합 : 2개
3 / 1, 2 / 2, 1 / 3 => 4의 합 : 3개
이런식으로 1, 2, 3의 덧셈으로 이루어진다고 생각을 했다.
같은 범위 내에 있는 숫자는 합이 N으로 같다.
그래서 해당 N이 1의 합(1) 의 범위인지, 2의 합(2~3)의 범위인지, 3(4~6)의 범위인 지 확인했다.
N이 만약 9라면, 4의 합 범위이며 4의 합 범위 중, 3번째 숫자 값이다.
이 때 범위 중 N번째 숫자 값은 start를 N으로 설정하였고, end는 (i+1)-start로 설정하였다.
start + end 는 => i+1의 합이기 때문이다.
i의 합 중, 짝수일 경우는 1/N부터 시작을 하고
i의 합 중, 홀수일 경우는 N/1부터 시작을 하기 때문이다.
숫자를 바꿔서 출력한다..
다른 사람 답
num = int(input())
line = 1
while num > line:
num -= line
line += 1
# 짝수일경우
if line % 2 == 0:
a = num
b = line - num + 1
# 홀수일경우
elif line % 2 == 1:
a = line - num + 1
b = num
print(f'{a}/{b}')
살짝 비슷하면서 다르다..
훨씬 더 깔끔한 코드인 듯 하다
Kotlin 버전 답
import kotlin.math.abs
fun main() {
val N = readLine()!!.toInt()
var cnt = 0
var i = 1
while (true) {
cnt += i
if (cnt >= N) break
i++
}
val start = i + N - cnt
val end = i - start + 1
if (i % 2 == 0) {
println("$start/$end")
} else {
println("$end/$start")
}
}
\
머리속으로는 계산이 안돼서.. 그림을 그렸다.
'코딩테스트' 카테고리의 다른 글
[Python] 백준 10866번 - 덱 (0) | 2024.06.10 |
---|---|
[Python] 백준 20310번 - 타노스 (0) | 2024.06.06 |
[Python] 백준 10828번 - 스택 (0) | 2024.06.03 |
[Python] 백준 21921 블로그 (0) | 2024.05.31 |
[Python] 백준 2960번 - 에라토스테네스의 체 (1) | 2024.05.30 |