/////
Search

백엔드 스쿨 프로그래밍 과제 (1)

아래 9개의 문제 중, 각 난이도 별 문제 하나씩을 선택하여 문제를 풀고 해설 코드를 캡쳐하여 제출해 주시기 바랍니다. → 올바른 선택 예시) 하-3, 중-1, 상-1 → 잘못된 선택 예시) 하-1, 중-1, 중-2 (동일한 난이도 내 두 문제를 선택하는 것은 평가에 반영하지 않습니다. 반드시 각 난이도 별 문제 하나씩을 선택하여 주시기 바랍니다.) 모든 문제를 완벽하게 해결하지 못하셔도 괜찮습니다. 구현 하실 수 있는 만큼 코드를 작성하시고 캡쳐해주시기 바랍니다. 또한, 문제 해석과 관련된 질문은 답변드리기 어렵습니다. 양해 부탁드리겠습니다!

2차 프로그래밍 과제 리스트

난이도
문제 분류
문제 개요
하-1
자바 기초 & 알고리즘
정수 2개를 입력받고 5가지의 연산결과를 출력합니다.
하-2
자바 기초 & 알고리즘
양의 정수를 입력받고 1부터 해당 입력값 사이의 모든 소수를 출력합니다.
하-3
자바 기초 & 알고리즘
양의 정수를 입력받고 1부터 해당 입력값 사이의 모든 소수를 출력합니다. (조건: -1을 입력하면 프로그램을 종료하며, 소수 판별 함수에 메모이제이션 기법을 적용하여 최적화 합니다.)
중-1
객체지향
캐릭터는 무기를 교체할 수 있습니다.
중-2
객체지향
캐릭터는 무기를 교체할 수 있습니다. (조건: 얼음마법사의 기본무기는 얼음지팡이 입니다.)
중-3
객체지향
캐릭터는 무기를 교체할 수 있습니다. (조건: 캐릭터 클래스를 구상클래스로 구현하고, 캐릭터 객체 생성은 캐릭터공장 클래스에 의해 이뤄져야 합니다.)
상-1
스프링부트
채팅 메세지를 작성하고 조회할 수 있습니다. (조건: 조회 시 fromId 파라미터를 입력하면 모든 메세지들이 아닌 필터링 된 결과가 조회 되어야 합니다.)
상-2
스프링부트
글을 작성하고 조회하고 수정할 수 있습니다. (조건: 수정 시 수정 날짜가 갱신 되어야 합니다.)
상-3
스프링부트
할 일을 작성하고 조회하고 삭제할 수 있습니다. (조건: 삭제가 된 할 일의 번호는 할 일 생성 시에 다시 사용하지 않습니다.)

하-1

정수 2개를 입력받고 5가지의 연산결과를 출력합니다.
5가지 연산
나눈 몫
나눈 나머지
두번째 입력값은 0이 될 수 없습니다.
음수는 입력가능
입력된 데이터가 잘못 되었을 경우 오류메세지 출력 후 다시 입력 받습니다.
입력된 데이터가 잘못된 경우
정수가 아닌 경우
두번째 입력값이 0인 경우
long 자료형이 아닌 int 자료형을 사용해주세요.
상세 설명 영상
입/출력 예시
== 입력 == 숫자 1 입력 : [입력 1] 숫자 2 입력 : [입력 2] == 결과 == - 합 : [결과 1] - 차 : [결과 2] - 곱 : [결과 3] - 나눈 몫 : [결과 4] - 나눈 나머지 : [결과 5]
Plain Text
복사
작동 예시

하-2

양의 정수를 입력받고 1부터 해당 입력값 사이의 모든 소수를 출력합니다.
소수: 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수
long 자료형이 아닌 int 자료형을 사용해주세요.
상세 설명 영상
입/출력 예시
== 입력 == 숫자 입력 : [입력 1] == 결과 == - [결과 1] - [결과 2] - [결과 ..] - [결과 n]
Plain Text
복사
작동 예시

하-3

양의 정수를 입력받고 1부터 해당 입력값 사이의 모든 소수를 출력합니다.
-1을 입력하면 프로그램을 종료합니다.
즉, -1을 입력하기 전까지는 프로그램이 종료되지 않습니다.
입력된 수가 소수인지 판별하는 함수에 메모이제이션 기법을 적용하여 최적화합니다.
long 자료형이 아닌 int 자료형을 사용해주세요.
상세 설명 영상
입/출력 예시
== 입력 == 숫자 입력 : [입력 1] == 결과 == - [결과 1] - [결과 2] - [결과 ..] - [결과 n] == 입력 == 숫자 입력 : [입력 1] == 결과 == - [결과 1] - [결과 2] - [결과 ..] - [결과 n] == 입력 == 숫자 입력 : [입력 2] == 종료 ==
Plain Text
복사
작동 예시

중-1

캐릭터는 무기를 교체할 수 있습니다.
아래 코드가 작동하도록 Main 클래스 외에 나머지 부분을 코딩해주세요.
전사의 기본공격력은 10 입니다.
무기 추상클래스를 구현해주세요.
출력은 오직 System.out.printf 함수만 이용해주세요.
System.out.printf은 오직 무기 클래스에서만 사용할 수 있습니다.
상세 설명 영상
Main.java
public class Main { public static void main(String[] args) { 전사 a전사 = new 전사(); a전사.공격(); // 출력 : 전사(이)가 칼(으)로 공격합니다. // 출력 : 데미지 : 전사 기본공격력(10) * 칼 공격력(20) => 200 a전사.set무기(new()); a전사.공격(); // 출력 : 전사(이)가 활(으)로 공격합니다. // 출력 : 데미지 : 전사 기본공격력(10) * 활 공격력(100) => 1000 } }
Java
복사

중-2

캐릭터는 무기를 교체할 수 있습니다.
조건: 얼음마법사의 기본 무기는 얼음지팡이 입니다.
아래 코드가 작동하도록 Main 클래스 외에 나머지 부분을 코딩해주세요.
무기 추상클래스를 구현해주세요.
불지팡이얼음지팡이 클래스를 구현해주세요.
캐릭터가 무기를 사용하는 구성으로 설계해주세요.
출력은 오직 System.out.println 함수만 이용해주세요.
System.out.println은 오직 무기 클래스에서만 사용할 수 있습니다.
얼음마법사는 초반 아이템이 얼음지팡이라는 점만 제외하면 나머지는 마법사와 같습니다.
상세 설명 영상
Main.java
// Main.java public class Main { public static void main(String[] args) { 캐릭터 a캐릭터 = new 전사(); a캐릭터.공격(); // 출력 : 전사(이)가 칼(으)로 공격합니다. // 출력 : 데미지 : 전사 기본공격력(10) * 칼 공격력(20) => 200 a캐릭터.set무기(new()); a캐릭터.공격(); // 출력 : 전사(이)가 활(으)로 공격합니다. // 출력 : 데미지 : 전사 기본공격력(10) * 활 공격력(100) => 1000 a캐릭터 = new 마법사(); a캐릭터.공격(); // 출력 : 마법사(이)가 불지팡이(으)로 공격합니다. // 출력 : 데미지 : 마법사 기본공격력(5) * 불지팡이 공격력(50) => 250 a캐릭터 = new 얼음마법사(); a캐릭터.공격(); // 출력 : 마법사(이)가 얼음지팡이(으)로 공격합니다. // 출력 : 데미지 : 마법사 기본공격력(5) * 얼음지팡이 공격력(60) => 300 } }
Java
복사

중-3

캐릭터는 무기를 교체할 수 있습니다.
조건: 캐릭터 클래스를 추상 클래스로 구현하고, 캐릭터 객체 생성은 캐릭터 공장 클래스에 의해 이루어져야 합니다.
아래 코드가 작동하도록 Main 클래스 외에 나머지 부분을 코딩해주세요.
무기 추상클래스를 구현해주세요.
불지팡이얼음지팡이 클래스를 구현해주세요.
캐릭터가 무기를 사용하는 구성으로 설계해주세요.
출력은 오직 System.out.printf 함수만 이용해주세요.
System.out.printf은 오직 무기 클래스에서만 사용할 수 있습니다.
얼음마법사는 초반 아이템이 얼음지팡이라는 점만 제외하면 나머지는 마법사와 같습니다.
각각의 캐릭터 객체는 2개이상 존재할 수 없습니다. 1개만 존재해야 합니다.
캐릭터공장.get("활전사"); 코드를 2번 실행한다고 하더라도, 활전사 객체는 단 1명만 존재해야 합니다.
캐릭터공장은 Map을 사용해서 한번 생성했던 객체들을 보관해야 합니다.
상세 설명 영상
입/출력 예시
// Main.java public class Main { public static void main(String[] args) { 캐릭터 a캐릭터 = 캐릭터공장.get("칼전사"); a캐릭터.공격(); // 출력 : 전사(이)가 칼(으)로 공격합니다. // 출력 : 데미지 : 전사 기본공격력(10) * 칼 공격력(20) => 200 a캐릭터 = 캐릭터공장.get("활전사"); a캐릭터.공격(); // 출력 : 전사(이)가 활(으)로 공격합니다. // 출력 : 데미지 : 전사 기본공격력(10) * 활 공격력(100) => 1000 a캐릭터 = a캐릭터 = 캐릭터공장.get("불마법사"); a캐릭터.공격(); // 출력 : 마법사(이)가 불지팡이(으)로 공격합니다. // 출력 : 데미지 : 마법사 기본공격력(5) * 불지팡이 공격력(50) => 250 a캐릭터 = a캐릭터 = 캐릭터공장.get("얼음마법사"); a캐릭터.공격(); // 출력 : 마법사(이)가 얼음지팡이(으)로 공격합니다. // 출력 : 데미지 : 마법사 기본공격력(5) * 얼음지팡이 공격력(60) => 300 } }
Java
복사

상-1

채팅메세지를 작성하고 조회할 수 있습니다.
조건: 조회 시 fromId 파라미터를 입력하면, 모든 메시지들이 아닌 필터링 된 결과가 조회되어야 합니다.
스프링부트를 이용해서 채팅 메세지를 작성하고, 작성된 메세지들을 조회하는 API 엔드포인트 2개를 구현해주세요.
채팅 메세지 작성 요청 엔드포인트 : POST /chat/writeMessage
작성된 채팅 메세지들 조회 요청 엔드포인트 : GET /chat/messages
DB는 사용하지 않아도 됩니다.
요청과 응답형식 문제의 요구사항과 맞춰주세요.
상세 설명 영상
채팅 메시지 작성
[요청]
METHOD : POST
URL : /chat/writeMessage
Header
Accept: application/json
Content-Type: application/json
BODY : {"authorName": "작성자 명", "content": "채팅 메세지 내용"}
[응답]
{ "resultCode": "S-1", "msg": "성공", "data": { "uuid": "80efe3fb-b0c3-4ea8-863e-c6c7e656c68e" /* 서버에서 입력받은 데이터로 채팅 메세지 객체를 만들 때, UUID 도 생성하여 추가한다. */ } }
Java
복사
채팅 메시지 목록
[요청]
METHOD : GET
URL : /chat/message?fromUuid=[생략가능]
PARAMETERS
필수
없음
옵션
fromUuid
만약에 이 파리미터가 존재한다면, 해당 uuid 를 가지는 메세지를 기준으로 그 이후에 작성된 메세지들만 조회
이 파라미터가 없다면 전체 메세지들이 조회
Header
Accept: application/json
[응답]
{ "resultCode": "S-1", "msg": "성공", "data": { "messages": [ { "uuid": "5682f525-dcd1-41db-bf80-750690688b4b", "createDate": "2022-12-14 14:32:20", "authorName": "홍길동", "content": "내용 1" }, { "uuid": "1dc648c7-1649-4964-86ba-de596b6b7543", "createDate": "2022-12-14 14:32:31", "authorName": "임꺽정", "content": "내용 2" }, { "uuid": "6cfc0f14-736a-43c4-8e21-7bbf84ec2a94", "createDate": "2022-12-14 14:32:36", "authorName": "홍길동", "content": "내용 3" }, { "uuid": "bfac67a9-22c9-482a-b757-7879afe32325", "createDate": "2022-12-14 14:32:38", "authorName": "임꺽정", "content": "내용 4" }, { "uuid": "7d59dbb5-1cb4-4eeb-a3c7-cbf28c9b9989", "createDate": "2022-12-14 14:33:02", "authorName": "홍길동", "content": "내용 5" }, { "uuid": "5175b19b-e1da-4cb1-871e-4c7978d86fdb", "createDate": "2022-12-14 14:36:10", "authorName": "홍길동", "content": "내용 6" }, { "uuid": "80efe3fb-b0c3-4ea8-863e-c6c7e656c68e", "createDate": "2022-12-14 15:03:17", "authorName": "홍길동", "content": "내용 7" } ] } }
Java
복사
Message.java
// Message.java import lombok.AllArgsConstructor; import lombok.Getter; import lombok.ToString; import java.time.LocalDateTime; import java.util.UUID; @AllArgsConstructor @Getter @ToString public class Message { private final UUID uuid; private final LocalDateTime createDate; private final String authorName; private final String content; public Message(String authorName, String content) { this(UUID.randomUUID(), LocalDateTime.now(), authorName, content); } }
Java
복사

상-2

글을 작성하고 조회하고 수정할 수 있습니다.
조건: 수정 시 수정날짜가 갱신되어야 합니다.
스프링부트를 이용해서 글을 작성하고, 작성된 글들을 조회하는 API를 구현해주세요.
작성된 글을 수정하는 API도 구현해주세요.
글 작성 API : POST /posts
글 수정 API : PATCH /posts/{글번호}
글들 조회 API : GET /posts
상세 설명 영상
글 작성
[요청]
METHOD : POST
URL : /posts
Header
Accept: application/json
Content-Type: application/json
BODY : {"subject": "제목", "content": "내용"}
[응답]
{ "resultCode": "S-1", "msg": "성공", "data": { "id": 1 /* 서버에서 입력받은 데이터로 글 객체를 만들 때, id 도 생성하여 추가한다, id는 1씩 증가한다. */ } }
Java
복사
채팅 메시지 목록
[요청]
METHOD : GET
URL : /posts
Header
Accept: application/json
[응답]
{ "resultCode": "S-1", "msg": "성공", "data": { "messages": [ { "id": 1, "createDate": "2022-12-14 14:32:20", "modifyDate": "2022-12-14 14:32:20", "subject": "제목 1", "content": "내용 1" }, { "id": 2, "createDate": "2022-12-14 14:32:31", "modifyDate": "2022-12-14 14:32:31", "subject": "제목 2", "content": "내용 2" }, { "id": 3, "createDate": "2022-12-14 14:32:36", "modifyDate": "2022-12-14 14:32:36", "subject": "제목 3", "content": "내용 3" }, { "id": 4, "createDate": "2022-12-14 14:32:38", "modifyDate": "2022-12-14 14:32:38", "subject": "제목 4", "content": "내용 4" }, { "id": 5, "createDate": "2022-12-14 14:33:02", "modifyDate": "2022-12-14 14:33:02", "subject": "제목 5", "content": "내용 5" }, { "id": 6, "createDate": "2022-12-14 14:36:10", "modifyDate": "2022-12-14 14:36:10", "subject": "제목 6", "content": "내용 6" }, { "id": 7, "createDate": "2022-12-14 15:03:17", "modifyDate": "2022-12-14 15:03:17", "subject": "제목 7", "content": "내용 7" } ] } }
Java
복사
글 수정
[요청]
METHOD : PATCH
URL : /posts/{글 번호}
Header
Accept: application/json
Content-Type: application/json
BODY : {"subject": "제목 NEW", "content": "내용 NEW"}
특이사항
해당 글의 modifyDate 가 최신날짜로 갱신되어야 합니다.
[응답]
{ "resultCode": "S-1", "msg": "성공", "data": {} }
Java
복사
Post.java
// Post.java import lombok.AllArgsConstructor; import lombok.Getter; import lombok.ToString; import java.time.LocalDateTime; @AllArgsConstructor @Getter @ToString public class Post { private final Long id; private final LocalDateTime createDate; private final LocalDateTime modifyDate; private final String subject; private final String content; }
Java
복사

상-3

할 일을 작성하고 조회하고 삭제할 수 있습니다.
조건: 삭제가 된 할 일의 번호는 할 일 생성 시에 다시 사용하지 않습니다.
스프링부트를 이용해서 할 일을 작성하고, 작성된 할 일들을 조회하는 API를 구현해주세요.
작성된 할 일을 삭제하는 API도 구현해주세요.
할 일 작성 API : POST /todos
할 일 삭제 API : DELETE /todos/{글번호}
할 일들 조회 API : GET /todos
상세 설명 영상
할 일 작성
요청
METHOD : POST
URL : /todos
Header
Accept: application/json
Content-Type: application/json
BODY : {"content": "할일 내용", "performDate": "2022-12-18 12:00:00"}
content : 할일내용
performDate : 할일을 언제 해야 하는지(날짜 yyyy-MM-dd HH:mm:ss)
응답
{ "resultCode": "S-1", "msg": "성공", "data": { "id": 1 /* 서버에서 입력받은 데이터로 글 객체를 만들 때, id 도 생성하여 추가한다, id는 1씩 증가한다. */ } }
Java
복사
할 일들 조회
[요청]
METHOD : GET
URL : /todos
Header
Accept: application/json
[응답]
{ "resultCode": "S-1", "msg": "성공", "data": { "todos": [ { "id": 1, "createDate": "2022-12-14 14:32:20", "performDate": "2022-12-18 12:12:12", "content": "할일 1" }, { "id": 2, "createDate": "2022-12-14 14:32:31", "performDate": "2022-12-18 12:12:12", "content": "할일 2" }, { "id": 3, "createDate": "2022-12-14 14:32:36", "performDate": "2022-12-18 12:12:12", "content": "할일 3" }, { "id": 4, "createDate": "2022-12-14 14:32:38", "performDate": "2022-12-18 12:12:12", "content": "할일 4" }, { "id": 5, "createDate": "2022-12-14 14:33:02", "performDate": "2022-12-18 12:12:12", "content": "할일 5" }, { "id": 6, "createDate": "2022-12-14 14:36:10", "performDate": "2022-12-18 12:12:12", "content": "할일 6" }, { "id": 7, "createDate": "2022-12-14 15:03:17", "performDate": "2022-12-18 12:12:12", "content": "할일 7" } ] } }
Java
복사
할 일 삭제
[요청]
METHOD : DELETE
URL : /todos/{글번호}
Header
Accept: application/json
Content-Type: application/json
BODY : none
[응답]
{ "resultCode": "S-1", "msg": "성공", "data": null }
Java
복사
Todo.java
// Todo.java import lombok.AllArgsConstructor; import lombok.Getter; import lombok.ToString; import java.time.LocalDateTime; @AllArgsConstructor @Getter @ToString public class Todo { private final Long id; private final LocalDateTime createDate; private final LocalDateTime performDate; private final String content; }
Java
복사