백준 24313번 풀이

BOJ/[BOJ] Python 2023. 7. 17. 23:36
반응형

문제

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
Lv. 36 라이츄

Lv. 36 라이츄

광고 매크로 없는 청정한 블로그를 위해 노력중입니다. 근데 나만 노력하는 것 같음… ㅡㅡ

방명록