barcode

백준 24313번 풀이

BOJ/[BOJ] Python

문제

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

직접 가서 보십시오. 난 당최 뭔 소린지 모르겠음.

 

Reference

https://everyday-image-processing.tistory.com/520

 

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

핵심 포인트 시간 복잡도 제출코드 a0, a1 = map(int, input().split()) c = int(input()) n0 = int(input()) flag = 1 for i in range(n0, 100): if a0 * i + a1 > c * i: flag = 0 break print(flag) 해설 다항식 $f(n)$의 계수인 $a_{0}$와 $a_{1}

everyday-image-processing.tistory.com

 

풀이

이 문제를 본 본인 표정:

김구라짤 아니냐고요? 아니 이해도 못했다니까? 김구라짤은 그래도 뭔 문제인지 이해는 했다는 얘기예요. 근데 이건 아녀.

 

일단 일차식이 하나 주어진다. 그리고 c랑 n0은 뭐냐... 이 문제에서 최종적으로 확인해야 하는 건 일차식 일차항 계수와 y절편이 주어지면 일차함수 나와요 안나와요? 나옵니다. 그 일차식 일차항 n에 n0부터 100까지의 값을 넣어서 f(n) < g(n)인지를 보면 되는 문제다. 그리고 g(n) = n이므로 c * n이 된다.

 

예시를 보면 똑같은 일차식인데 1부터 할때는 조건을 만족하지 못하고 10부터 조건을 만족한다고 하는데... 이게 왜 이러냐... f(1) = 14, f(2) = 21 이런 식으로(f(0)이 7이다) 1부터 9까지는 f(n)이 8n보다 크다. 그러다가 10이 되면 f(10) = 77이고 8n은 80이 되기 때문에 f(n)이 8n보다 작아지게 된다.

 

import sys

a, b = map(int,sys.stdin.readline().split()) # 순서대로 a1 a0
c = int(sys.stdin.readline())
n = int(sys.stdin.readline()) # n0

flag = 1
for i in range(n,101):
    if a * i + b > c * i:
        flag = 0
        break

print(flag)

flag가 왜 있냐면 조건을 만족하지 못할 때는 print(0) break를 쓰면 0 하나만 나오고 끝난다. 근데 조건을 만족하면 1이 줄창 나온 다음에 끝나그덩. 그러니까 flag를 1(True)로 설정해놓고 조건에 부합하지 않으면 flag를 0(False)으로 바꾸고 빠져나오면 되고(하나라도 안 맞으면 그냥 0), 조건에 부합하면 다 돌고 나와서 flag를 그대로 출력하는 구조.

 

근데 이런게 더 있을까봐 두렵다... 진짜... 이차원 배열때는 뭔지 알겠는데 어떻게 함? 이었는데 이거는 보자마자 이게 뭔 소린가 싶더라..

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 14425번 풀이  (0) 2023.07.31
백준 19532번 풀이  (0) 2023.07.20
백준 24267번 풀이  (0) 2023.07.15
백준 24266번 풀이  (0) 2023.07.13
백준 24265번 풀이  (0) 2023.07.11