File tree Expand file tree Collapse file tree 8 files changed +17
-17
lines changed Expand file tree Collapse file tree 8 files changed +17
-17
lines changed Original file line number Diff line number Diff line change @@ -20,7 +20,7 @@ OCaml에서 집합이나 맵을 만들 때는 항상 타입과 비교 (`compare`
20
20
21
21
## 규칙
22
22
- 반복문 재귀 호출로 구현하고 ` for ` 문을 사용하지 않는다.
23
- - 원소 천 만개를 생성하고 집합으로 변환하는데 30초를 넘지 않아야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
23
+ - 원소 천만개를 생성하고 집합으로 변환하는데 30초를 넘지 않아야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
24
24
``` console
25
25
$ time ./compare 10000000
26
26
./compare 10000000 46.86s user 3.29s system 99% cpu 50.149 total
Original file line number Diff line number Diff line change @@ -15,8 +15,8 @@ OCaml에서 빈 리스트인지를 검사하는 원시적인 방법은 해당
15
15
이 모듈은 ` ./empty -opt [길이] ` 로 실행할 수 있다.
16
16
17
17
## 규칙
18
- - 순환문은 재귀 호출로 구현하고 ` for ` 문을 사용하지 않는다.
19
- - 천만개 원소를 생성하고 처리하는 데 수 초를 넘지 않아야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
18
+ - 반복문은 재귀 호출로 구현하고 ` for ` 문을 사용하지 않는다.
19
+ - 원소 천만 개를 생성하고 처리하는 데 수 초를 넘지 않아야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
20
20
``` console
21
21
$ time ./empty 10000000
22
22
4999630
Original file line number Diff line number Diff line change 1
1
# 파일 읽고 쓰기
2
2
3
3
## 목표
4
- 큰 파일을 빠르게 읽고 쓸 수 있어야 한다. 이를 위하여 꼬리 재귀 함수를 이용할 수 있어야 한다.
4
+ 큰 파일을 빠르게 읽고 쓸 수 있어야 한다. 이를 위하여 꼬리 재귀 함수를 이용할 수 있어야 한다.
5
5
6
6
## 구현
7
7
#### 큰 파일 생성기
8
8
` ./gen [줄 수] ` 를 실행하면 해당 줄만큼 랜덤 숫자가 채워진 ` large.txt ` 파일이 생성되어야 한다. 이를 위해서, [ gen.ml] ( src/gen.ml ) 의 ` generate ` 함수를 작성한다.
9
9
#### 큰 파일 처리기
10
10
` ./read large.txt ` 를 실행하면 모든 줄에 있는 숫자를 읽은 후 짝수의 개수를 출력되어야 한다. 하지만 여기서 사용되는 함수 ` read_file_unopt ` 는 비효율적이다.
11
- 파일이 큰 경우 느리거나 스택오버플로우를 유발한다.
11
+ 파일이 큰 경우 느리거나 스택오버플로우를 유발한다.
12
12
13
13
이를 해결하기 위해서, [ read.ml] ( src/read.ml ) 의 ` read_file_opt ` 함수를 작성하라. 이 함수는 ` ./read -opt large.txt ` 로 호출할 수 있다.
14
14
15
15
## 규칙
16
- - 순환문은 재귀 호출로 구현하고 ` for ` 문을 사용하지 않는다.
17
- - 1억줄 파일을 읽고 쓰는데 1분을 넘지 않아야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
16
+ - 반복문은 재귀 호출로 구현하고 ` for ` 문을 사용하지 않는다.
17
+ - 1억줄짜리 파일을 읽고 쓰는데 1분을 넘지 않아야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
18
18
``` console
19
19
$ time ./gen 100000000
20
20
./gen 100000000 12.16s user 0.30s system 99% cpu 12.457 total
Original file line number Diff line number Diff line change @@ -16,8 +16,8 @@ OCaml에서 리스트의 원소를 추가하는 방법은 두 가지가 있다.
16
16
이 모듈은 ` ./list -opt [길이] ` 로 실행할 수 있다.
17
17
18
18
## 규칙
19
- - 순환문은 재귀 호출로 구현하고 ` for ` 문을 사용하지 않는다.
20
- - 천만개 원소를 생성하고 제곱하는 데 수 초를 넘지 않아야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
19
+ - 반복문은 재귀 호출로 구현하고 ` for ` 문을 사용하지 않는다.
20
+ - 원소 천만 개를 생성하고 제곱하는 데 수 초를 넘지 않아야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
21
21
``` console
22
22
$ time ./list 10000000
23
23
timeout (>5 min)
Original file line number Diff line number Diff line change @@ -15,8 +15,8 @@ OCaml에서 정규식은 `Str.regexp` 함수를 사용하여 만든다.
15
15
이 모듈은 ` ./regexp -opt [길이] ` 로 실행할 수 있다.
16
16
17
17
## 규칙
18
- - 순환문은 재귀 호출로 구현하고 ` for ` 문을 사용하지 않는다.
19
- - 천만개 원소를 생성하고 검사하는 데 5초를 넘지 않아야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
18
+ - 반복문은 재귀 호출로 구현하고 ` for ` 문을 사용하지 않는다.
19
+ - 원소 천만 개를 생성하고 검사하는 데 5초를 넘지 않아야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
20
20
``` console
21
21
$ time ./regexp 10000000
22
22
1496356
Original file line number Diff line number Diff line change @@ -19,8 +19,8 @@ OCaml에서는 자료구조를 직렬화하는 `Marshal` 모듈을 제공한다.
19
19
` generate_opt ` 와 ` read_file_opt ` 를 작성하라.
20
20
21
21
## 규칙
22
- - 순환문은 재귀 호출로 구현하고 ` for ` 문을 사용하지 않는다.
23
- - 백만줄 파일을 읽고 쓰는데 1초을 넘지 않아야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
22
+ - 반복문은 재귀 호출로 구현하고 ` for ` 문을 사용하지 않는다.
23
+ - 백만 줄짜리 파일을 읽고 쓰는데 1초을 넘지 않아야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
24
24
``` console
25
25
$ time ./gen 1000000
26
26
./gen 1000000 12.16s user 0.30s system 99% cpu 12.457 total
Original file line number Diff line number Diff line change @@ -15,8 +15,8 @@ OCaml에서 문자열을 이어붙이는 가장 쉬운 방법은 `String.cat` (`
15
15
이 모듈은 ` ./string -opt [길이] ` 로 실행할 수 있다.
16
16
17
17
## 규칙
18
- - 순환문은 재귀 호출로 구현하고 ` for ` 문을 사용하지 않는다.
19
- - 백만개 원소를 생성하고 접합하는 데 1초를 넘지 않아야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
18
+ - 반복문은 재귀 호출로 구현하고 ` for ` 문을 사용하지 않는다.
19
+ - 원소 백만 개를 생성하고 접합하는 데 1초를 넘지 않아야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
20
20
``` console
21
21
$ time ./string 1000000
22
22
timeout (>5 min)
Original file line number Diff line number Diff line change 10
10
이를 해결하기 위하여, 효율적인 길이함수 ` length_opt ` 를 작성하라. 이 함수는 ` ./tail -opt [길이] ` 로 호출할 수 있다.
11
11
12
12
## 규칙
13
- - 순환문은 재귀 호출로 구현하고 ` for ` 문을 사용하지 않는다.
14
- - 원소 천만개짜리 리스트를 수 초 안에 처리하여야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
13
+ - 반복문은 재귀 호출로 구현하고 ` for ` 문을 사용하지 않는다.
14
+ - 원소 천만 개짜리 리스트를 수 초 안에 처리하여야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
15
15
``` console
16
16
$ time ./tail 10000000
17
17
Fatal error: exception Stack_overflow
You can’t perform that action at this time.
0 commit comments