> For the complete documentation index, see [llms.txt](https://70825.gitbook.io/koala_basic_study_5th/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://70825.gitbook.io/koala_basic_study_5th/week3/3.md).

# EOF

## End Of File

EOF란 End Of File의 약자입니다. 단어 그대로 파일의 끝이라고 하는데요. 알고리즘 문제에서는 입력 값이 몇 줄이나 주어지는지 나와있지 않으면 EOF를 이용하여 문제를 풀어야 합니다.

EOF 문제를 푸는 방법은 두가지 방법이 있습니다. 하나는 try / except를 이용하는 방법과 하나는 sys 모듈과 for문을 이용하는 방법입니다.

```python
while True:
    try:
        blah blah
    except EOFError:
        break
```

try / except문은 위와 같이 while문으로 무한루프 안에서 EOF가 나오기 전까지 try문으로 값을 받다가, EOF값이 나오면 EOFError가 나오기 때문에 except문에 적혀있는 break문으로 무한루프를 빠져나올 수 있게 됩니다.

```python
import sys

for line in sys.stdin:
    blah blah
```

sys모듈을 이용한 방법은 위와 같이 for문과 sys.stdin을 통해 받을 수 있습니다. 다만 주의할 점은 입력 값이 line 변수에 저장되기 때문에 line을 이용하여 입력 값을 처리해야 합니다.

디버깅을 할 때 우리가 직접 EOF를 하려면 Ctrl + D 혹은 Ctrl + Z를 눌러주면 됩니다.

## 연습문제

### BOJ 11718

{% embed url="<https://www.acmicpc.net/problem/11718>" %}

문제에서 입력이 최대 100줄이 주어져 있다고 나와있는데요. 이 말은 최대 100줄이므로 입력 값이 한 줄만 나오고 프로그램이 종료될 수도 있고, 50줄만 나오고 프로그램이 종료될 수도 있다는 말입니다. 그래서 총 몇 줄인지 정확하게 주어지지 않았으므로 EOF를 사용하여 문제를 풀어야 합니다.

이 문제는 입력 값을 따로 처리하지 않으므로 input()으로 값을 받고 바로 출력하면 되겠네요.

```python
while True:
    try:
        k = input()
        print(k)
    except EOFError:
        break
```

```python
import sys

for k in sys.stdin:
    print(k)
```

### BOJ 10823

{% embed url="<https://www.acmicpc.net/problem/10823>" %}

이 문제도 정확하게 몇 줄의 값을 받는지 나와있지 않습니다. 입력 예제도 보니까 입력 값도 이상하네요.

입력 값을 보니까 문자열의 연산자인 +를 이용하여 하나의 문자열 변수에 입력 값을 계속 붙여주면 될 것 같네요.

```python
s = ''
while True:
    try:
        line = input()
        s += line
    except EOFError:
        break
```

```python
import sys

s = ''
for line in sys.stdin:
    s += line
```

이렇게 값을 붙여주었으면 이제 split(',')를 이용하여 콤마를 기준으로 숫자를 나눠주고, sum함수를 이용하여 문제를 풀면 되겠습니다.

```python
s = ''
while True:
    try:
        line = input()
        s += line
    except EOFError:
        break
arr = list(map(int, s.split(',')))
print(sum(arr))
```

```python
import sys

s = ''
for line in sys.stdin:
    s += line
arr = list(map(int, s.split(',')))
print(sum(arr))
```

### 풀어볼 문제

EOF 문제는 try / except나 for문 + sys모듈중 아무거나 편한 것을 사용하면 됩니다.

* <https://www.acmicpc.net/problem/11719>
* <https://www.acmicpc.net/problem/1371>
* <https://www.acmicpc.net/problem/1673>
