Skip to content

Commit

Permalink
add java web backend level test
Browse files Browse the repository at this point in the history
  • Loading branch information
javajigi committed Oct 11, 2017
1 parent 337b166 commit 0de9194
Show file tree
Hide file tree
Showing 4 changed files with 182 additions and 0 deletions.
Binary file removed .DS_Store
Binary file not shown.
41 changes: 41 additions & 0 deletions level2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
## 실습 진행 방법 및 제출 방법
* 실습은 자신이 가장 자신 있는 언어를 선택해 다음 문제를 구현한다.
* 실습 결과물은 [GitHub](https://github.com)를 통해 공유한다.

## 숫자 야구게임
#### 요구사항
기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다.

같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방의 수를 맞추면 승리한다.

[] 상대방의 수가 425일 때, 123을 제시한 경우 : 1 스트라이크 456을 제시한 경우 : 1 스트라이크 1볼 789를 제시한 경우 : 낫싱

위 숫자 야구게임에서 상대방의 역할을 컴퓨터가 한다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. 게임 플레이어는 컴퓨터가 생각하고 있는 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과를 출력한다.

이 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임이 종료된다.

게임 진행 결과는 다음과 같다.

```
숫자를 입력해주세요 ex)123 : 123
1 스트라이크 1볼
숫자를 입력해주세요 ex)123 : 145
1볼
숫자를 입력해주세요 ex)123 : 671
2볼
숫자를 입력해주세요 ex)123 : 216
1 스트라이크
숫자를 입력해주세요 ex)123 : 713
3 스트라이크
3개의 숫자를 모두 맞히셨습니다! 게임 종료
```

#### 프로그래밍 구현 제약사항
* 함수(또는 메소드)의 크기가 최대 10라인을 넘지 않도록 구현한다.
* 함수(또는 메소드)가 한 가지 일만 하도록 최대한 작게 만들어라.
* indent(인덴트, 들여쓰기) depth를 최대한 작게 만들어라. depth가 1인 상태가 가장 좋다.

#### 힌트
* 컴퓨터가 3개의 값을 선택할 때 각 언어별 random 함수(또는 메소드) 또는 shuffle 함수(또는 메소드)를 이용하면 편한다.
* 반복문을 2중(반복문 안의 반복문)으로 사용하면 한번에 고려할 부분이 많다. 2중 반복문을 1중 반복문 2개로 나누어 처리하는 방법은 없는지 고려해 본다.
* depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다.
58 changes: 58 additions & 0 deletions webbackend-java/level3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
## 실습 진행 방법 및 제출 방법
* 실습은 java 언어를 사용해 다음 문제를 해결해야 한다.
* 실습 결과물은 [GitHub](https://github.com)를 통해 공유한다.

## 볼링게임 점수판
볼링 점수를 계산하는 프로그램을 구현한다.

* 볼링 게임의 점수 계산 방식 아는 사람은 바로 구현을 시작한다.
* 점수 계산 방식을 모르는 사람은 구글에서 "볼링 점수 계산법"과 같은 키워드로 검색해 볼링 게임의 점수 계산 방식을 학습한 후 구현을 시작한다.

볼링 게임 실행 결과는 다음과 같다.

```
플레이어 이름은(3 english letters)?: PJS
| NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
| PJS | | | | | | | | | | |
| | | | | | | | | | | |
PJS's turn : 10
| NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
| PJS | X | | | | | | | | | |
| | | | | | | | | | | |
PJS's turn : 8
| NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
| PJS | X | 8 | | | | | | | | |
| | | | | | | | | | | |
PJS's turn : 2
| NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
| PJS | X | 8|/ | | | | | | | | |
| | 20 | | | | | | | | | |
PJS's turn : 7
| NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
| PJS | X | 8|/ | 7 | | | | | | | |
| | 20 | 37 | | | | | | | | |
PJS's turn : 0
| NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
| PJS | X | 8|/ | 7|- | | | | | | | |
| | 20 | 37 | 44 | | | | | | | |
PJS's turn : 10
...
```

#### 프로그래밍 제약 사항
* 객체 지향 설계 기반 개발이 가능하도록 구현한다.
* 상속을 사용해 구현해야 한다. 예를 들어 1 ~ 9 프레임과 10 프레임의 동작 방식이 다른데 이 부분을 상속을 통해 해결해 본다.
* 배열 대신 java의 collection(List, Map 등)을 사용해 구현해야 한다.
* 중요한 로직에 대한 소스 코드는 junit 기반의 단위 테스트가 존재해야 한다.
* indent(인덴트, 들여쓰기) depth를 2단계에서 1단계로 줄여라.
* depth의 경우 if문을 사용하는 경우 1단계의 depth가 증가한다. if문 안에 while문을 사용한다면 depth가 2단계가 된다.
* else를 사용하지 마라.
* 메소드의 크기가 최대 10라인을 넘지 않도록 구현한다.
* method가 한 가지 일만 하도록 최대한 작게 만들어라.
83 changes: 83 additions & 0 deletions webbackend-java/level4.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
## 실습 진행 방법 및 제출 방법
* 실습은 java 언어 기반의 웹 프레임워크를 활용해 다음 문제를 해결해야 한다.
* MVC 패턴 기반으로 개발해야 한다.
* 실습 결과물은 [GitHub](https://github.com)를 통해 공유한다.

## 볼링게임 점수판
볼링 점수를 계산하는 프로그램을 구현한다.

* 볼링 게임의 점수 계산 방식 아는 사람은 바로 구현을 시작한다.
* 점수 계산 방식을 모르는 사람은 구글에서 "볼링 점수 계산법"과 같은 키워드로 검색해 볼링 게임의 점수 계산 방식을 학습한 후 구현을 시작한다.

#### 요구사항
* 1명 이상 사용자의 볼링 게임 점수를 관리할 수 있는 프로그램을 구현한다.
* 콘솔 화면에서 볼링 게임 실행 결과는 다음과 같다. **콘솔 화면의 UI를 웹 UI 기반으로 동작하도록 구현해야 한다.**
* 사용자가 잘못된 값을 입력했을 때는 에러 메시지를 사용자에게 보여줘야 한다.

```
How many people? 2
플레이어 1의 이름은?(3 english letters): PJS
플레이어 2의 이름은?(3 english letters): KYJ
| NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
| PJS | | | | | | | | | | |
| | | | | | | | | | | |
| KYJ | | | | | | | | | | |
| | | | | | | | | | | |
PJS's turn : 10
| NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
| PJS | X | | | | | | | | | |
| | | | | | | | | | | |
| KYJ | | | | | | | | | | |
| | | | | | | | | | | |
KYJ's turn : 8
| NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
| PJS | X | | | | | | | | | |
| | | | | | | | | | | |
| KYJ | 8 | | | | | | | | | |
| | | | | | | | | | | |
KYJ's turn : 2
| NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
| PJS | X | | | | | | | | | |
| | | | | | | | | | | |
| KYJ | 8|/ | | | | | | | | | |
| | | | | | | | | | | |
PJS's turn : 8
| NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
| PJS | X | 8 | | | | | | | | |
| | | | | | | | | | | |
| KYJ | 8|/ | | | | | | | | | |
| | | | | | | | | | | |
PJS's turn : 2
| NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
| PJS | X | 8|/ | | | | | | | | |
| | 20 | | | | | | | | | |
| KYJ | 8|/ | | | | | | | | | |
| | | | | | | | | | | |
KYJ's turn : 10
| NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
| PJS | X | 8|/ | | | | | | | | |
| | 20 | | | | | | | | | |
| KYJ | 8|/ | X | | | | | | | | |
| | 20 | | | | | | | | | |
PJS's turn :
...
```

#### 프로그래밍 제약 사항
* 객체 지향 설계 기반 개발이 가능하도록 구현한다.
* 상속을 사용해 구현해야 한다. 예를 들어 1 ~ 9 프레임과 10 프레임의 동작 방식이 다른데 이 부분을 상속을 통해 해결해 본다.
* 배열 대신 java의 collection(List, Map 등)을 사용해 구현해야 한다.
* 모든 소스 코드는 junit 기반의 단위 테스트가 존재해야 한다.(controller 코드는 제외)
* indent(인덴트, 들여쓰기) depth를 2단계에서 1단계로 줄여라.
* depth의 경우 if문을 사용하는 경우 1단계의 depth가 증가한다. if문 안에 while문을 사용한다면 depth가 2단계가 된다.
* else를 사용하지 마라.
* 메소드의 크기가 최대 10라인을 넘지 않도록 구현한다.
* method가 한 가지 일만 하도록 최대한 작게 만들어라.

0 comments on commit 0de9194

Please sign in to comment.