Where who wants to meet someone

백준 Swift [24313] 알고리즘 수업 - 점근적 표기 1 본문

백준 알고리즘 문제 기록/시간 복잡도

백준 Swift [24313] 알고리즘 수업 - 점근적 표기 1

Lust3r 2023. 7. 3. 17:09
728x90

난이도

실버 V

 

문제

https://www.acmicpc.net/problem/24313

 

24313번: 알고리즘 수업 - 점근적 표기 1

f(n) = 7n + 7, g(n) = n, c = 8, n0 = 1이다. f(1) = 14, c × g(1) = 8이므로 O(n) 정의를 만족하지 못한다.

www.acmicpc.net

 

내 답안

let input = readLine()!.split(separator: " ").map { Int($0)! }

let a1 = input[0]
let a0 = input[1]

let c = Int(readLine()!)!
let n = Int(readLine()!)!

a1 * n + a0 <= c * n && a1 <= c ? print(1) : print(0)

처음에는 a1 * n + a0 <= c * n ? print(1) : print(0) 로 했는데 틀렸다는 결과를 받았다.

왜일까? 하고 식을 다시 보니 몇가지 놓친 것이 있었다.

첫째로 (0 ≤ |ai| ≤ 100) 에서 ai는 0부터 100 사이의 0 혹은 양수겠구나 했던 점. 하지만 절대값이기 때문에 -1 ~ -100같은 음수도 된다.

둘째로 <=로 묶여있는 양쪽에서 똑같이 n을 곱해주는데 좌측이 우측보다 작거나 같으려면 a1이 c보다 작아야 한다. 크다면 a0로 그만큼을 상쇄시켜줘야 하기 때문이다.

a0이 양수라면 a1이 c보다 작아야 하고, a0이 0이라면 a1은 c와 같아야 하며, a0가 음수라면 a1이 c보다 커서는 안된다(처음엔 조건이 충족될 수 있으나 n이 큰 상황에서는 배로 늘어난 값에서 최대 100을 빼봤자 좌측이 커진다.)

 

그랬을 때 추가해줘야 하는 것이 a1 <= c인 것이고 코드처럼 결과가 나왔다.