본문 바로가기
Coding Test (코딩 테스트)

코딩테스트 9일차(2025.01.23) - 11021번(A+B - 7)

by BioLearner 2025. 1. 23.
반응형

내 풀이

첫번째 줄 연산갯수나머지 N줄 둘이 더하기단,  Case #x: 로 되어있어야함

 

import sys

# 첫째줄 입력받기
input = sys.stdin.readline
T = int(input().rstrip())

# 나머지 줄 인식 및 연산
for i in range(1, T+1):
    A, B = map(int, input().rstrip().split())
    print(f"Case #{i}: {A + B}")

결과: 정답

더 옳은 정답

import sys

input = sys.stdin.readline
T = int(input().rstrip())  # 테스트 케이스 개수 입력

for i in range(1, T + 1):  # 테스트 케이스 번호는 1부터 시작
    A, B = map(int, input().rstrip().split())  # 두 정수 A와 B 입력
    print(f"Case #{i}: {A + B}")  # 결과 출력

 

내가 쓴 내용 중에서 틀린 점은 없었다. 다른 방식으로 푼다고 생각한다면, while문으로 바꾸는 것도 생각할 수 있다. 하지만 while문으로 쓰기 위해서는 T값을 삭제해가는 코드를 만들어야하기 떄문에 for 문으로 바꾸는 것도 생각할 수 있다. 

 

고찰

질문: 위의 방법 말고 다른 방법은 어떤게 있을 수 있을까?

 

1. 결과를 저장 후 한 번에 출력

import sys

input = sys.stdin.readline
T = int(input().rstrip())
results = []  # 결과 저장 리스트

for i in range(1, T + 1):
    A, B = map(int, input().rstrip().split())
    results.append(f"Case #{i}: {A + B}")

sys.stdout.write("\n".join(results) + "\n")  # 한 번에 출력

 

2. 포멧 문자열 대신 format()사용

import sys

input = sys.stdin.readline
T = int(input().rstrip())

for i in range(1, T + 1):
    A, B = map(int, input().rstrip().split())
    print("Case #{}: {}".format(i, A + B))  # `format()`으로 출력

 

python3.5이하에서는 필수적이였음

 

3. 리스트 컴프리헨션 활용

import sys

input = sys.stdin.readline
T = int(input().rstrip())

results = [
    f"Case #{i + 1}: {sum(map(int, input().rstrip().split()))}"
    for i in range(T)
]

print("\n".join(results))

 

4. 클래스를 사용하여 문제 구현

import sys

class TestCaseProcessor:
    def __init__(self, T):
        self.T = T
        self.results = []

    def process(self):
        for i in range(1, self.T + 1):
            A, B = map(int, input().rstrip().split())
            self.results.append(f"Case #{i}: {A + B}")

    def output(self):
        print("\n".join(self.results))


if __name__ == "__main__":
    input = sys.stdin.readline
    T = int(input().rstrip())
    processor = TestCaseProcessor(T)
    processor.process()
    processor.output()

 

5. 무한 입력 종료 방식으로 처리

import sys

input = sys.stdin.readline
case_num = 1

while True:
    line = input().rstrip()
    if not line:  # 빈 줄 입력 시 종료
        break
    A, B = map(int, line.split())
    print(f"Case #{case_num}: {A + B}")
    case_num += 1

 

6. 함수를 사용한 간결화

import sys

def solve():
    input = sys.stdin.readline
    T = int(input().rstrip())
    for i in range(1, T + 1):
        A, B = map(int, input().rstrip().split())
        print(f"Case #{i}: {A + B}")

solve()

 

이 중 1번 결과를 저장 후 한 번에 출력 하는 방식의 코드가 가장 효과적이며 이것은 시간 복잡도 부분에서 가장 효율적인 모습을 보여준다. 

 

입력처리의 경우 sys.stdin.readline과 .rstrip을 사용하여 데이트 케이스 수만큼 입력처리를 하였기 때문에 시간복잡도가 O(T)이며,

 

출력처리는 sys.stdout.write로 하였기 때문에 시간 복잡도는 O(T)로 총 시간 복잡도는 O(T)로 매우 효율적이다. 

반응형