관리 메뉴

솜씨좋은장씨

[BaekJoon] 20953번 : 고고학자 예린 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 20953번 : 고고학자 예린 (Python)

솜씨좋은장씨 2022. 9. 17. 23:34
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 고고학자 예린입니다.

 

20953번: 고고학자 예린

예린은 고고학자이다. 예린은 강원대학교 백록관 지하에서 고인돌이 발견되었다는 소식을 듣고 누구보다 빠르게 백록관에 도착하였다. 고인돌을 본 순간 예린은 놀라 자빠질 수밖에 없었다. 고

www.acmicpc.net

👨🏻‍💻문제 풀이

오 수도 코드도 있겠다 엄청 쉽게 풀 수 있겠네? 라고 생각했지만 

역시나 그렇게 호락호락하지 않은 문제였습니다.

int dolmen(int a, int b) {
    int sum, i, j, k;
    sum = 0;
    for (i = 0; i < a + b; i++) {
        for (j = 0; j < a + b; j++) {
            for (k = 0; k < j; k++) {
                sum++;
            }
        }
    }
    return sum;
}

위 코드를 보고 Python으로 구현하면 아래와 같습니다.

def dolmen(a: int, b: int):
    sum_num = 0
    
    for i in range(a+b):
        for j in range(a+b):
            for k in range(j):
                sum_num += 1
                
    return sum_num

하지만 이렇게 제출하면 3중 for 문에 의해서 시간초과가 발생합니다.

어떻게 하지... 생각하다 보니 반복문이 돌아가는 횟수를 그냥 계산하면 되겠다 싶었습니다.

def dolmen(a: int, b: int):                
    return (a + b) * (a + b - 1) * (a + b) // 2

이렇게 하니 시간초과 문제는 해결이 되었습니다.

힌트

입력과 출력의 양이 방대하므로 빠른 입출력을 사용할 것을 권장한다.

빠른 입출력에는 sys.stdin.readline을 활용하였습니다.

import sys

input = sys.stdin.readline

👨🏻‍💻코드 ( Solution )

import sys

input = sys.stdin.readline

def dolmen(a: int, b: int):                
    return (a + b) * (a + b - 1) * (a + b) // 2
    

def archaeologist_yerin(a, b):
    return dolmen(a=a, b=b)


if __name__ == "__main__":
    for _ in range(int(input())):
        a, b = map(int, input().split())
        
        print(archaeologist_yerin(a=a, b=b))
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments