Part 1. 새로운 연산자(Feat. 바다코끼리🦭)

  • 백준 10951번 문제 보고 입력의 끝을 어떻게 알 수 있지? 하고 멘붕.

  • 문제 클릭 전 EOF 라는 힌트를 봄

    EOF stands for End Of File. This is the point in the program where the user cannot read the data anymore.

    참조: https://www.delftstack.com/howto/python/python-end-of-file/

    • EOF는 더 이상 데이터를 읽은 수 없는 파일의 끝이라는 의미이다.
  • 사용자 입력을 문제에 맞게 출력 해주다가 EOF만나면 종료시켜주면 되는 문제다.

  • 풀이1

    import sys
    test_cases = sys.stdin.readlines() # EOF를 받기 전까지 사용자 입력을 받는다(한 줄씩 리스트 형태로 담아줌)
    
    for case in test_cases:
        a, b = map(int, case.split())
        print(a+b)
  • 풀이2

    while True:
        try:
            a, b = map(int, input().split())
            print(a+b)
        except EOFError:
            break
    • 처음에 풀 때 아무 생각 없이 위와 같이 풀어 제출했는데, EOFError라는 결과를 받게 되었다. 거기서 try ~ except 구문으로 해결해보면 어떨까 에서 착안함.
  • 풀이3 - Walrus Operator 사용 (Python 3.8 이상)

    import sys
    
    # := 연산자를 이용하면 조건문에서 변수에 값이 할당 된다!
    while case := sys.stdin.readline():
        a, b = map(int, case.split())
        print(a+b)
    • 위에 EOF관련 글 보다가 알게 된 연산자를 이용해보았다. Python 3.8부터 제공하는 연산자인데, 코드 라인 수를 줄이는데 도움이 될 것 같다!!
    • Python문서를 보면 바다코끼리의 눈과 상아와 닮아서 := Walrus operator라고 했다. 귀엽다.
  • 뽀나스

    • Python에서 사용자 입력으로 EOF는 어떻게 입력 할 수 있을까?
      - *nix(유닉스,리눅스 계열): Ctrl-D
      - Windows: Ctrl-Z + Return
      참조: https://wikidocs.net/20464