├── 2017-white-java ├── baseball.md └── string-edit.md ├── README.md ├── level1-common └── math.pdf ├── level2-common └── level2.md ├── mobile-ios ├── .DS_Store ├── level3.md └── level4.md ├── webbackend-java ├── .DS_Store ├── level3.md └── level4.md └── webfrontend ├── .DS_Store ├── level3.md └── level4.md /2017-white-java/baseball.md: -------------------------------------------------------------------------------- 1 | ## 숫자 야구게임 2 | #### 숫자 야구게임 방식 3 | 기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다. 4 | 5 | 같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방의 수를 맞추면 승리한다. 6 | 7 | [예] 상대방의 수가 425일 때, 123을 제시한 경우 : 1 스트라이크 456을 제시한 경우 : 1 스트라이크 1볼 789를 제시한 경우 : 낫싱 8 | 9 | #### 요구사항 10 | 위 숫자 야구게임에서 상대방의 역할을 컴퓨터가 한다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. 게임 플레이어는 컴퓨터가 생각하고 있는 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과를 출력한다. 11 | 12 | 이 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임이 종료된다. 13 | 14 | #### 힌트 15 | * 컴퓨터가 3개의 값을 선택할 때 Collections.shuffle()을 이용하면 편하다. 16 | * 반복문을 2중(반복문 안의 반복문)으로 사용하면 한번에 고려할 부분이 많다. 2중 반복문을 1중 반복문 2개로 나누어 처리하는 방법은 없는지 고려해 본다. -------------------------------------------------------------------------------- /2017-white-java/string-edit.md: -------------------------------------------------------------------------------- 1 | # 문장 통계 프로그램 2 | 3 | 다음 조건을 만족하는 프로그램을 작성하시오. 4 | 5 | 입력: 주어진 문장을 입력 받는다. 6 | 7 | 출력: 8 | 1. (필수)문장의 단어를 역순으로 출력한다. 9 | 2. (필수)문장에 포함되어 있는 알파벳의 전체 수를 출력한다. 10 | 3. (선택)문장에 사용된 알파벳의 숫자를 최상위 빈도로 출력한다. 11 | 12 | ## 입력 13 | 14 | > Do you know Doctor who? 15 | 16 | ## 출력 17 | ``` 18 | who Doctor know you Do? 19 | 전체 수 : 18 20 | o: 6 21 | w: 2 22 | ... (생략) 23 | ``` 24 | 25 | ## 힌트 26 | * 문제에서 불명확한 부분은 자연스러운 형태로 가정하고 제출할 것. 27 | * String의 split() 메소드를 활용해 공백 문자 기준으로 문자열을 분리할 수 있다. 28 | * String의 length() 메소드를 통해 문자열의 길이를 구할 수 있다. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 코드스쿼드 레벨 테스트 2 | 3 | #### 공통 문제 4 | * [레벨 1](level1-common/math.pdf) 5 | * [레벨 2](level2-common/level2.md) 6 | 7 | #### 웹프론트엔드 레벨 테스트 문제 8 | * [레벨 3](webfrontend/level3.md) 9 | * [레벨 4](webfrontend/level4.md) 10 | 11 | #### 모바일iOS 레벨 테스트 문제 12 | * [레벨 3](mobile-ios/level3.md) 13 | * [레벨 4](mobile-ios/level4.md) 14 | 15 | #### 웹백엔드JAVA 레벨 테스트 문제 16 | * [레벨 3](webbackend-java/level3.md) 17 | * [레벨 4](webbackend-java/level4.md) 18 | -------------------------------------------------------------------------------- /level1-common/math.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-squad/test-item-pool/f362edb9984c95728f0d4cfc1dc5bd89e9c30ef1/level1-common/math.pdf -------------------------------------------------------------------------------- /level2-common/level2.md: -------------------------------------------------------------------------------- 1 | ## 실습 진행 방법 및 제출 방법 2 | * 실습은 자신이 가장 자신 있는 언어를 선택해 다음 문제를 구현한다. 3 | * 실습 결과물은 [GitHub](https://github.com)를 통해 공유한다. 4 | 5 | ## 숫자 야구게임 6 | #### 요구사항 7 | 기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다. 8 | 9 | 같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방의 수를 맞추면 승리한다. 10 | 11 | [예] 상대방의 수가 425일 때, 123을 제시한 경우 : 1 스트라이크 456을 제시한 경우 : 1 스트라이크 1볼 789를 제시한 경우 : 낫싱 12 | 13 | 위 숫자 야구게임에서 상대방의 역할을 컴퓨터가 한다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. 게임 플레이어는 컴퓨터가 생각하고 있는 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과를 출력한다. 14 | 15 | 이 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임이 종료된다. 16 | 17 | 게임 진행 결과는 다음과 같다. 18 | 19 | ``` 20 | 숫자를 입력해주세요 ex)123 : 123 21 | 1 스트라이크 1볼 22 | 숫자를 입력해주세요 ex)123 : 145 23 | 1볼 24 | 숫자를 입력해주세요 ex)123 : 671 25 | 2볼 26 | 숫자를 입력해주세요 ex)123 : 216 27 | 1 스트라이크 28 | 숫자를 입력해주세요 ex)123 : 713 29 | 3 스트라이크 30 | 3개의 숫자를 모두 맞히셨습니다! 게임 종료 31 | ``` 32 | 33 | #### 프로그래밍 구현 제약사항 34 | * 함수(또는 메소드) 하나의 크기가 최대 10라인을 넘지 않도록 구현한다. 35 | * 함수(또는 메소드)가 한 가지 일만 하도록 최대한 작게 만들어라. 36 | * indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다. 37 | * 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다. 38 | * 전역 변수를 사용하지 않는다. 39 | 40 | #### 힌트 41 | * 컴퓨터가 3개의 값을 선택할 때 각 언어별 random 함수(또는 메소드) 또는 shuffle 함수(또는 메소드)를 이용하면 편한다. 42 | * 반복문을 2중(반복문 안의 반복문)으로 사용하면 한번에 고려할 부분이 많다. 2중 반복문을 1중 반복문 2개로 나누어 처리하는 방법은 없는지 고려해 본다. 43 | * indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다. -------------------------------------------------------------------------------- /mobile-ios/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-squad/test-item-pool/f362edb9984c95728f0d4cfc1dc5bd89e9c30ef1/mobile-ios/.DS_Store -------------------------------------------------------------------------------- /mobile-ios/level3.md: -------------------------------------------------------------------------------- 1 | 2 | # 시작하기 3 | - macOS - Command Line Tool 템플릿으로 시작하세요. 4 | - 아래 요구사항을 만족하는 앱을 완성하세요. 5 | - 본인 github에 저장소를 새로 만들고 문제 해결 과정을 단계별로 커밋 메시지에 기록하세요. 6 | 7 | ### 요구사항#1. 아래 상품을 추상화한 클래스 만드세요 8 | - 속성에 따라 상위, 하위 부류를 만들어 상속관계를 만드세요. 9 | - (자기만의 기준으로) 클래스 이름을 정하세요. 10 | - 필수 속성 : 브랜드(String), 무게(Int), 가격(Int), 이름(String), 제조일자(Date) 11 | - 상품 클래스에 비교를 위해서 Protocol Equatable 을 추가하고 구현하세요. 12 | 13 | ### 요구사항#2. 5가지 종류 상품을 판매하는 자판기 struct를 만드세요 14 | 다음과 같은 동작을 위한 함수를 작성하세요. 15 | - 자판기 금액을 원하는 금액만큼 올리는 함수 16 | - 특정 상품 인스턴스를 넘겨서 재고를 추가하는 함수 17 | - 현재 금액으로 구매가능한 상품 목록을 리턴하는 함수 18 | - 특정 상품를 구매하는 함수 19 | - 잔액을 확인하는 함수 20 | - 전체 상품 재고를 (사전으로 표현하는) 종류별로 리턴하는 함수 21 | - 시작이후 구매 상품 이력을 배열로 리턴하는 함수 22 | 23 | ### 요구사항#3. main에서 메뉴를 구성하세요. 24 | - 자판기 화면을 자기만의 방식으로 메뉴를 표시하세요. 25 | - 메뉴에서 입력하는 동작을 자판기 함수에 연결하세요. 26 | - 전체 코드를 확인할 수 있는 통합 테스트 시나리오를 가지고 동작을 확인하세요. 27 | - 예를 들어서, 재고 몇 개 추가하고 잔액 얼마 추가하면 어떤 상품 구매가능, 불가능인지 확인하고 가능한 상품 구매하고, 잔액 바뀌고 재고 상태 바뀌고, 구매 상품 이력을 확인한다. 28 | - [ANSI Escape Code](https://en.wikipedia.org/wiki/ANSI_escape_code)를 활용해서 화면을 꾸며보세요. 29 | - 아래 ANSI 관련 코드를 받아서 확장해도 됩니다. 30 | https://www.dropbox.com/s/gwho0rrelfsrc06/HelloSwift.zip?dl=0 31 | - 화면 예시 32 | ![콘솔 메뉴](http://public.codesquad.kr/jk/level2-console-menu.png) 33 | 34 | -------------------------------------------------------------------------------- /mobile-ios/level4.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 시작하기 4 | - iOS - Single View App 템플릿으로 시작하세요. 5 | - 아래 요구사항을 만족하는 앱을 완성하세요. 6 | - 본인 github에 저장소를 새로 만들고 문제 해결 과정을 단계별로 커밋 메시지에 기록하세요. 7 | - 맨 아래 셀프 체크리스트를 꼭 추가하세요. 8 | 9 | ### 요구사항1. 데모 이미지를 프로젝트에 추가하세요. 10 | - 데모 이미지 파일을 다운받으세요. 11 | https://www.dropbox.com/s/3n0ip892eq3lytp/Demo%20Images.zip?dl=0 12 | - 압축을 풀고 프로젝트 번들에 드래그 해서 추가하세요 13 | - 프로젝트에 그룹을 만들어서 관리하면 편합니다 14 | 15 | ### 요구사항2. JSON 데이터 16 | 17 | - 모델 객체 인스턴스를 만들고 18 | - 아래의 jsonString 데이터를 넘겨서 19 | - Array 데이터를 title 기준으로 정렬시켜 사용하세요 20 | 21 | ```swift 22 | let jsonString = """ 23 | [{\"title\":\"초록\",\"image\":\"01.jpg\",\"date\":\"20150116\"}, 24 | {\"title\":\"장미\",\"image\":\"02.jpg\",\"date\":\"20160505\"}, 25 | {\"title\":\"낙엽\",\"image\":\"03.jpg\",\"date\":\"20141212\"}, 26 | {\"title\":\"계단\",\"image\":\"04.jpg\",\"date\":\"20140301\"}, 27 | {\"title\":\"벽돌\",\"image\":\"05.jpg\",\"date\":\"20150101\"}, 28 | {\"title\":\"바다\",\"image\":\"06.jpg\",\"date\":\"20150707\"}, 29 | {\"title\":\"벌레\",\"image\":\"07.jpg\",\"date\":\"20140815\"}, 30 | {\"title\":\"나무\",\"image\":\"08.jpg\",\"date\":\"20161231\"}, 31 | {\"title\":\"흑백\",\"image\":\"09.jpg\",\"date\":\"20150102\"}, 32 | {\"title\":\"나비\",\"image\":\"10.jpg\",\"date\":\"20141225\"}] 33 | """ 34 | ``` 35 | 36 | ### 요구사항3. Album ViewController 구현하기 37 | - TableView DataSource를 Album ViewController로 설정 38 | - TableView에 Model에 있는 10개 데이터를 출력하세요 39 | - `func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell` 델리게이트 메서드를 구현하세요 40 | - `cell.titleLabel` 에는 title 을 표시하고, `cell.detailLabel` 에는 date를 표시하세요 41 | - `cell.backgroundImage` 에 이미지를 center로 alignment 해서 표시하세요. 42 | 43 | ![Tableview](http://public.codesquad.kr/jk/tableView-cell.png) 44 | 45 | ### 요구사항4. Photo ViewController 구현하기 46 | - TableView에서 row를 select 하면 다음 화면을 보여주세요. 47 | - Image는 원래 비율(aspect fit)로 보여주세요. 48 | 49 | ![PhotoViewController](http://public.codesquad.kr/jk/photo-ViewController.png) 50 | 51 | ### 요구사항5. TableView Header 52 | - 날짜순으로 정렬한 상태의 년도별로 Section을 나눠서 표시하고 Header에 년도를 표시하세요. 53 | 54 | ![TableviewHeader](http://public.codesquad.kr/jk/tableView-header.png) 55 | 56 | ## 셀프 체크리스트 57 | - 프로젝트에 checklist.md 파일을 추가하고 아래 항목을 복사해서 붙여넣으세요. 58 | - 아래 항목에 대해 자신의 경험을 체크하고, 자신의 점수를 각 10점만점 기준으로 적고, 그 이유를 주관식으로 문장으로 쓰세요. 59 | 60 | [항목#1] 스위프트(또는 Objective-C) 언어로 여러 가지 상황별 주어진 문제를 해결하는 경험 61 | 62 | - 1-1 Immutable 객체와 Mutable 객체의 차이를 이해하고 설명할 수 있다. 63 | - 1-2 특정 디렉터리에 있는 파일 목록을 탐색하는 알고리듬을 구현할 수 있다. 64 | - 1-3 C 혹은 Objective-C 데이터 타입을 스위프트 구조체로 바꾸거나 클래스로 표현하여 Collection 객체에 담아 저장할 수 있다. 65 | - 1-4 주어진 상황에 맞게 Array나 Dictionary에 담겨있는 데이터를 탐색하고 정렬할 수 있다. (JSON 처리 등) 66 | - 1-5 자동/수동 메모리 관리 방법을 구분하고 차이점을 설명할 수 있다. 67 | 68 | 자기 의견: 69 | 70 | [항목#2] 인터페이스 디자인 가이드(HIG)를 기초로 기본 UI Control 동작을 구현하는 경험 71 | 72 | - 2-1 스토리보드 상에 ViewController 단위로 화면을 디자인하고 Segue로 전환할 수 있다. 73 | - 2-2 UITableView 에 Custom Cell 형태로 디자인하고 DataSource Delegate 메서드를 구현할 수 있다. 74 | - 2-3 메모리 효율을 위해 화면에 보이지 않는 객체를 해제하는 LRU 형태 캐시를 구현할 수 있다. 75 | - 2-4 MVC 패턴을 이해하고 각각 역할에 맞는 클래스를 구현하고 Notification을 보내는 구조를 구현할 수 있다. 76 | 77 | 자기 의견: 78 | 79 | [항목#3] iOS 앱 개발을 위해 프레임워크 API를 활용하는 경험 80 | 81 | - 3-1 네트워크 처리 및 Async 방식 이벤트 처리 기술을 적용할 수 있다. 82 | - 3-2 Core Graphics 방식으로 커스텀 그래프 컨트롤을 만들 수 있다. 83 | - 3-3 Transition 형태의 뷰 애니메이션을 직접 만들 수 있다. 84 | - 3-4 서버와 통신하기 위한 HTTP 또는 TCP 방식의 통신 모듈을 만들 수 있다. 85 | - 3-5 Block과 GCD (또는 Operation Queue)를 이용한 비동기 방식으로 작업 스케줄링을 구현 수 있다. 86 | 87 | 자기 의견: 88 | 89 | [항목#4] iOS 개발 환경을 이용해서 프로젝트를 관리하고 프로파일링하는 경험 90 | 91 | - 4-1 Xcode 도구를 이용해 iOS 프로젝트를 관리하고 실제 기기에 설치/배포할 수 있다. 92 | - 4-2 Instruments 도구를 이용해서 앱 프로파일링 분석하고, 코드를 개선할 수 있다. 93 | - 4-3 Xcode로 만든 프로젝트를 소스관리 저장소에서 관리할 수 있다. 94 | 95 | 자기 의견: -------------------------------------------------------------------------------- /webbackend-java/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-squad/test-item-pool/f362edb9984c95728f0d4cfc1dc5bd89e9c30ef1/webbackend-java/.DS_Store -------------------------------------------------------------------------------- /webbackend-java/level3.md: -------------------------------------------------------------------------------- 1 | ## 실습 진행 방법 및 제출 방법 2 | * 실습은 java 언어를 사용해 다음 문제를 해결해야 한다. 3 | * 실습 결과물은 [GitHub](https://github.com)를 통해 공유한다. 4 | 5 | ## 볼링게임 점수판 6 | 볼링 점수를 계산하는 프로그램을 구현한다. 7 | 8 | * 볼링 게임의 점수 계산 방식 아는 사람은 바로 구현을 시작한다. 9 | * 점수 계산 방식을 모르는 사람은 구글에서 "볼링 점수 계산법"과 같은 키워드로 검색해 볼링 게임의 점수 계산 방식을 학습한 후 구현을 시작한다. 10 | 11 | 볼링 게임 실행 결과는 다음과 같다. 12 | 13 | ``` 14 | 플레이어 이름은(3 english letters)?: PJS 15 | | NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 16 | | PJS | | | | | | | | | | | 17 | | | | | | | | | | | | | 18 | 19 | PJS's turn : 10 20 | | NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 21 | | PJS | X | | | | | | | | | | 22 | | | | | | | | | | | | | 23 | 24 | PJS's turn : 8 25 | | NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 26 | | PJS | X | 8 | | | | | | | | | 27 | | | | | | | | | | | | | 28 | 29 | PJS's turn : 2 30 | | NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 31 | | PJS | X | 8|/ | | | | | | | | | 32 | | | 20 | | | | | | | | | | 33 | 34 | PJS's turn : 7 35 | | NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 36 | | PJS | X | 8|/ | 7 | | | | | | | | 37 | | | 20 | 37 | | | | | | | | | 38 | 39 | PJS's turn : 0 40 | | NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 41 | | PJS | X | 8|/ | 7|- | | | | | | | | 42 | | | 20 | 37 | 44 | | | | | | | | 43 | 44 | PJS's turn : 10 45 | 46 | ... 47 | ``` 48 | 49 | #### 프로그래밍 제약 사항 50 | * 객체 지향 설계 기반 개발이 가능하도록 구현한다. 51 | * 상속을 사용해 구현해야 한다. 예를 들어 1 ~ 9 프레임과 10 프레임의 동작 방식이 다른데 이 부분을 상속을 통해 해결해 본다. 52 | * 배열 대신 java의 collection(List, Map 등)을 사용해 구현해야 한다. 53 | * 중요한 로직에 대한 소스 코드는 junit 기반의 단위 테스트가 존재해야 한다. 54 | * indent(인덴트, 들여쓰기) depth를 2단계에서 1단계로 줄여라. 55 | * depth의 경우 if문을 사용하는 경우 1단계의 depth가 증가한다. if문 안에 while문을 사용한다면 depth가 2단계가 된다. 56 | * else를 사용하지 마라. 57 | * 메소드의 크기가 최대 10라인을 넘지 않도록 구현한다. 58 | * method가 한 가지 일만 하도록 최대한 작게 만들어라. -------------------------------------------------------------------------------- /webbackend-java/level4.md: -------------------------------------------------------------------------------- 1 | ## 실습 진행 방법 및 제출 방법 2 | * 실습은 java 언어 기반의 웹 프레임워크를 활용해 다음 문제를 해결해야 한다. 3 | * MVC 패턴 기반으로 개발해야 한다. 4 | * 실습 결과물은 [GitHub](https://github.com)를 통해 공유한다. 5 | 6 | ## 볼링게임 점수판 7 | 볼링 점수를 계산하는 프로그램을 구현한다. 8 | 9 | * 볼링 게임의 점수 계산 방식 아는 사람은 바로 구현을 시작한다. 10 | * 점수 계산 방식을 모르는 사람은 구글에서 "볼링 점수 계산법"과 같은 키워드로 검색해 볼링 게임의 점수 계산 방식을 학습한 후 구현을 시작한다. 11 | 12 | #### 요구사항 13 | * 1명 이상 사용자의 볼링 게임 점수를 관리할 수 있는 프로그램을 구현한다. 14 | * 콘솔 화면에서 볼링 게임 실행 결과는 다음과 같다. **콘솔 화면의 UI를 웹 UI 기반으로 동작하도록 구현해야 한다.** 15 | * 사용자가 잘못된 값을 입력했을 때는 에러 메시지를 사용자에게 보여줘야 한다. 16 | 17 | ``` 18 | How many people? 2 19 | 플레이어 1의 이름은?(3 english letters): PJS 20 | 플레이어 2의 이름은?(3 english letters): KYJ 21 | | NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 22 | | PJS | | | | | | | | | | | 23 | | | | | | | | | | | | | 24 | | KYJ | | | | | | | | | | | 25 | | | | | | | | | | | | | 26 | 27 | PJS's turn : 10 28 | | NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 29 | | PJS | X | | | | | | | | | | 30 | | | | | | | | | | | | | 31 | | KYJ | | | | | | | | | | | 32 | | | | | | | | | | | | | 33 | 34 | KYJ's turn : 8 35 | | NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 36 | | PJS | X | | | | | | | | | | 37 | | | | | | | | | | | | | 38 | | KYJ | 8 | | | | | | | | | | 39 | | | | | | | | | | | | | 40 | 41 | KYJ's turn : 2 42 | | NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 43 | | PJS | X | | | | | | | | | | 44 | | | | | | | | | | | | | 45 | | KYJ | 8|/ | | | | | | | | | | 46 | | | | | | | | | | | | | 47 | 48 | PJS's turn : 8 49 | | NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 50 | | PJS | X | 8 | | | | | | | | | 51 | | | | | | | | | | | | | 52 | | KYJ | 8|/ | | | | | | | | | | 53 | | | | | | | | | | | | | 54 | 55 | PJS's turn : 2 56 | | NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 57 | | PJS | X | 8|/ | | | | | | | | | 58 | | | 20 | | | | | | | | | | 59 | | KYJ | 8|/ | | | | | | | | | | 60 | | | | | | | | | | | | | 61 | 62 | KYJ's turn : 10 63 | | NAME | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 64 | | PJS | X | 8|/ | | | | | | | | | 65 | | | 20 | | | | | | | | | | 66 | | KYJ | 8|/ | X | | | | | | | | | 67 | | | 20 | | | | | | | | | | 68 | 69 | PJS's turn : 70 | 71 | ... 72 | ``` 73 | 74 | #### 프로그래밍 제약 사항 75 | * 객체 지향 설계 기반 개발이 가능하도록 구현한다. 76 | * 상속을 사용해 구현해야 한다. 예를 들어 1 ~ 9 프레임과 10 프레임의 동작 방식이 다른데 이 부분을 상속을 통해 해결해 본다. 77 | * 배열 대신 java의 collection(List, Map 등)을 사용해 구현해야 한다. 78 | * 모든 소스 코드는 junit 기반의 단위 테스트가 존재해야 한다.(controller 코드는 제외) 79 | * indent(인덴트, 들여쓰기) depth를 2단계에서 1단계로 줄여라. 80 | * depth의 경우 if문을 사용하는 경우 1단계의 depth가 증가한다. if문 안에 while문을 사용한다면 depth가 2단계가 된다. 81 | * else를 사용하지 마라. 82 | * 메소드의 크기가 최대 10라인을 넘지 않도록 구현한다. 83 | * method가 한 가지 일만 하도록 최대한 작게 만들어라. 84 | -------------------------------------------------------------------------------- /webfrontend/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-squad/test-item-pool/f362edb9984c95728f0d4cfc1dc5bd89e9c30ef1/webfrontend/.DS_Store -------------------------------------------------------------------------------- /webfrontend/level3.md: -------------------------------------------------------------------------------- 1 | ## 할일 관리 프로그램. 2 | 3 | ### 1. 기능요구사항 4 | 다음처럼 동작하는 프로그래밍을 만든다. 5 | 할일을 관리하는 프로그램이며, 다음의 기능을 완성해야한다. 6 | 7 | - 이 자바스크립트 애플리케이션은, nodeJS기반으로 콘솔로 결과를 볼 수 있어야 한다. (브라우저에 동작하는 프로그램이 아님) 8 | - 개발도구는 무엇이든 상관없다. 9 | - 할일을 추가할 수 있다. 10 | - 할일이 추가되면 id 값을 생성하고 결과를 알려준다. 11 | - 상태는 3가지로 관리된다. todo, doing, done. 12 | - 각 일(task)는 상태값을 가지고 있고, 그 상태값을 변경할 수 있다. 13 | - 각 상태에 있는 task는 show함수를 통해서 볼 수 있다. 14 | - show명령에서 done상태를 노출할때는 소요시간도 출력한다. 15 | - update명령의 결과값은 3초 지연 후에 노출된다. 16 | - 명령어 입력시 '$'를 구분자로 사용해서 넣어야 한다. 17 | 18 | ### 2. 코드구현시 참고사항 19 | - 객체리터럴을 사용해서 모든 코드가 구현돼야 한다. (this 사용) 20 | - 함수의 크기가 적당해야하고, 함수를 잘 분리해야 한다. 21 | - 클린코드를 지향한다. 22 | - 시간이 부족하면 되는데 까지 구현하고 제출한다. 23 | - 동작결과가 크게 다르지 않다면, 결과 화면의 문구나 결과 표현방법은 약간 다른 부분이 발생해도 상관없다. 24 | - 요구사항이 잘못되었다고 판단되거나 이해가 안가는 부분은 스스로 판단해서 진행한다. (설명이 필요하면 주석으로 남긴다) 25 | 26 | ### 3. 동작예시. 27 | ```shell 28 | > "add$자바스크립트 공부하기" 29 | > id: 5, "자바스크립트 공부하기" 항목이 새로 추가됐습니다. //추가된 결과 메시지를 이렇게 출력 30 | > 현재상태 : todo:1개, doing:2개, done:2개 31 | 32 | > "show$doing" 33 | > "1, 그래픽스공부", "4, 블로그쓰기" //id값과 함께 task제목이 출력된다. 34 | 35 | > "show$done" 36 | > 'iOS공부하기, 3시간', '자바스크립트공부하기, 9시간', '미팅 1시간'. //이렇게 완료할때까지의 누적 시간을 표현한다. 37 | 38 | > "update$3$done" 39 | > 현재상태 : todo:1개, doing:1개, done:3개 //변경된 모든 상태가 노출되지만 3초뒤에 결과가 나와야 한다. 40 | ``` -------------------------------------------------------------------------------- /webfrontend/level4.md: -------------------------------------------------------------------------------- 1 | ## 검색자동완성 만들기 2 | 먼저 아래 기획서 내용을 참고한다. 3 | 4 | - https://docs.google.com/presentation/d/1E0HUKbGFaGpGIyZFbQ5iyX-egynVwXqfGqwl42VE1g4/edit#slide=id.g26ec6ac978_0_0 5 | 6 | 검색자동완성은 아마존에서 제공하는 검색창에서의 자동완성 텍스트를 만드는 기능이다. 7 | 8 | 위 기획서를 참고하고, 이해를 돕기 위해 amazon.com에서 자동완성 기능을 직접 체험하는 것이 좋다. 9 | 10 | ### 1. 기능요구사항 11 | - HTML,CSS를 라이브러리 없이 구현한다. (less, bootstrap 등 금지) 12 | - 디자인이 너무 이쁘지 않아도 괜찮지만, 일관된 디자인을 적용해야 한다. 특히 UI의 일정하고 규칙적인 배치는 중요하다. 13 | - JAVASCRIPT역시 라이브러리 없이 구현한다. (syntax는 자유, ES5,ES6 모두 가능) 14 | - 브라우저 호환성은 크게 고려하지 않고 최신브라우저를 지원. 15 | - 자동완성 데이터는 AJAX로 응답을 받아서 보여준다. 16 | - 자동완성 결과화면에서 일치하지 않는 부분만 굵게 보여야 한다.(아마존도 그렇게 동작한다) 17 | - 똑같은 데이터를 요청하면, 서버로 보내지 않고 재사용한다. 하지만 1분이 지난 데이터는 다시 서버로 요청해서 받아온다. 18 | - '최근검색어' 기능을 개발한다. 검색버튼(돋보기)을 눌렀던 검색어는 기억했다가, 다시 접속시 검색창에 포커스가 갈때 '최근검색어'로 노출되야 한다. 노출방식은 자동완성영역과 같은 위치에서 노출되야 한다. (네이버의 최근검색어 기능을 참고한다) 19 | - 검색창 입력 우측끝에는 'x'버튼이 있어 이것을 누르면 검색어가 삭제되고, 다시 최근검색어가 노출되도록 한다. 20 | 21 | ### 2.백엔드 구성 22 | - JSON응답을 할 수 있는 nodeJS + express 환경을 갖추고 응답처리한다.(백엔드 구성이 nodejs나, express가 아니여도 괜찮다) 23 | - DB가 없음으로 우리는 특정 문자열(예로 'JAVASCRIPT')을 선택해서, 한글자씩 입력할때마다 자동완성이 되는 기능을 만든다. 24 | - JSON 샘플 데이터는 아마존 사이트에 접속해서, 크롬 개발자 도구를 통해서 수집한다. 25 | - https://docs.google.com/presentation/d/1E0HUKbGFaGpGIyZFbQ5iyX-egynVwXqfGqwl42VE1g4/edit#slide=id.g27cc25ec5b_0_13 26 | - JSON응답을 위해서 DB연동은 필요 없고, 서버에서 JSON형태를 routing처리를 통해서 만든다. 27 | 28 | ### 3. 기타 코드구현시 참고사항 29 | - 코드구현전에 설계서를 자유포맷으로 작성하고, 이를 포함해서 제출한다(인증샷, 온라인문서링크 등 자유롭게 작성하고 제출) 30 | - 모든 코드는 prorotytpe기반의 객체화를 기본으로 해서 구현한다. 31 | - 함수는 크기가 적당하고, 재사용되도록 범용성을 고려해서 만든다. 32 | - 모든 코드는 클린코드를 지향한다. 33 | - 동작결과가 크게 다르지 않다면, 결과 화면의 문구나 결과의 표현방법은 약간 다른 부분이 발생해도 상관없다. 34 | - 요구사항이 잘못되었다고 판단되거나 이해가 안가는 부분은 스스로 판단해서 진행한다. (설명이 필요하면 주석으로 남긴다) 35 | - 검색자동완성이 다른 서비스에서 사용할 수 있도록 전체 코드가 범용성있는 라이브러리 형태일수록 이상적이다. 36 | - 커밋로그에 신경쓰고, 결과를 github에 올린다. 37 | - 시간이 부족하면 되는데까지 구현하고 제출한다.어떤 부분을 포기할지는 본인이 스스로 임의로 결정한다. 38 | --------------------------------------------------------------------------------