[9번]
1. 문제설명
// 엘리베이터는 4명이 탑승이 가능하며, 총 3개 층으로 이루어져있음.
// 탑승객은 목표 층을 입력하여 해당 층이 되면, 자동으로 내리게 구현.
// 엘리베이터는 무조건 올라갔다가 내려가는 형태로 이동.
1. package 는 com.elevator.service 이다.
(실제 현업에서도 식별하기 위해 domain name으로 사용합니다.)
2. main 함수는 ElevatorController 클래스에 만든다.
3. 서비스 구현은 ElevatorService 클래스에 만든다.
4. 참고하시라고 텍스트 드립니다. 또는 자유롭게 하셔도 너무 좋습니다. 🙂
public static void main(String[] args) { // 엘리베이터는 4명이 탑승이 가능하며, 총 3개 층으로 이루어져있음. // 탑승객은 목표 층을 입력하여 해당 층이 되면, 자동으로 내리게 구현. // 엘리베이터는 무조건 올라갔다가 내려가는 형태로 이동. ElevatorService es = new ElevatorService(); System.out.println("---- Welcome Elevator ----"); es.run(); } |
switch(sc.nextLine()) { case "1" : break; case "2" : break; case "3" : break; case "4" : break; default : |
System.out.println("메뉴를 선택하세요."); System.out.println("1.탑승 2.이동 3.탑승현황 4.종료"); System.out.println("탑승할 공간이 없습니다."); System.out.println("층 수를 선택해 주세요."); System.out.println("1.1층\t2.2층\t3.3층"); System.out.println("다시 입력해주세요."); System.out.println("목적지로 현재 층은 안됩니다."); System.out.println("입력하신 층은 " + + "층입니다."); System.out.println("현재 층수는" + + "층 입니다."); System.out.println( + "명이 하차하였습니다."); System.out.println("---- 탑승 현황 ----"); System.out.println("현재 탑승 인원은 " + + "명 입니다."); System.out.println("현재 층수는 " + + "층 입니다."); System.out.println("종료합니다."); System.out.println("잘못입력하였습니다."); |
System.out.println("엘리베이터 상태[현재층 : " + + "]"); System.out.print("[" + + "]"); System.out.print("[ ]"); System.out.println("행동을 입력하세요."); System.out.println("1.이동 2.탑승 9.종료"); System.out.println("어디에 탑승하시겠습니까?[취소 : 9]"); System.out.print("[불가능]"); System.out.print("[" + + "]"); System.out.println("몇층으로 가시겠습니까?[현재층 : " + + "]"); System.out.println("갈 수 없는 층입니다."); System.out.println("잘못입력하셨습니다."); System.out.println("엘리베이터 운행을 종료합니다."); |
5. 결과 예시입니다. 자유롭게 하셔도 너무 좋습니다. 🙂
- 탑승 선택시
---- Welcome Elevator ---- 메뉴를 선택하세요. 1.탑승 2.이동 3.탑승현황 4.종료 |
1
층 수를 선택해 주세요. 1.1층 2.2층 3.3층 |
2
입력하신 층은 2층입니다. |
메뉴를 선택하세요. 1.탑승 2.이동 3.탑승현황 4.종료 |
3
---- 탑승 현황 ---- 현재 탑승 인원은 2명 입니다. 현재 층수는 1층 입니다. 메뉴를 선택하세요. 1.탑승 2.이동 3.탑승현황 4.종료 |
- 이동 시
현재 층수는3층 입니다. 메뉴를 선택하세요. 1.탑승 2.이동 3.탑승현황 4.종료 |
2
현재 층수는2층 입니다. 2명이 하차하였습니다. 메뉴를 선택하세요. 1.탑승 2.이동 3.탑승현황 4.종료 |
2
- 탑승현황황
현재 층수는3층 입니다. 메뉴를 선택하세요. 1.탑승 2.이동 3.탑승현황 4.종료 |
3
---- 탑승 현황 ---- 현재 탑승 인원은 0명 입니다. 현재 층수는 2층 입니다. 메뉴를 선택하세요. 1.탑승 2.이동 3.탑승현황 4.종료 |
- 종료 시
4
종료합니다. |
6. 다른 결과 예시입니다. 자유롭게 하셔도 너무 좋습니다. 🙂
엘리베이터 상태[현재층 : 1] [ ][ ][ ][ ] 행동을 입력하세요. 1.이동 2.탑승 9.종료 |
1
엘리베이터 상태[현재층 : 2] [ ][ ][ ][ ] 행동을 입력하세요. 1.이동 2.탑승 9.종료 |
2
어디에 탑승하시겠습니까?[취소 : 9] [0][1][2][3] |
3
몇층으로 가시겠습니까?[현재층 : 2] |
2
갈 수 없는 층입니다. 몇층으로 가시겠습니까?[현재층 : 2] |
3
엘리베이터 상태[현재층 : 2] [ ][ ][ ][3] 행동을 입력하세요. 1.이동 2.탑승 9.종료 |
1
엘리베이터 상태[현재층 : 3] [ ][ ][ ][ ] 행동을 입력하세요. 1.이동 2.탑승 9.종료 |
9
엘리베이터 운행을 종료합니다. |
2. 나의 해답
<ElevatorController>
package com.elevator.service;
public class ElevatorController {
// 엘리베이터는 4명이 탑승이 가능하며, 총 3개 층으로 이루어져있음.
// 탑승객은 목표 층을 입력하여 해당 층이 되면, 자동으로 내리게 구현.
// 엘리베이터는 무조건 올라갔다가 내려가는 형태로 이동.
public static void main(String[] args) {
// TODO Auto-generated method stub
ElevatorService es = new ElevatorService();
System.out.println("---- Welcome Elevator ----");
es.run();
}
// System.out.println("메뉴를 선택하세요.");
// System.out.println("1.탑승 2.이동 3.탑승현황 4.종료");
// System.out.println("탑승할 공간이 없습니다.");
// System.out.println("층 수를 선택해 주세요.");
// System.out.println("1.1층\t2.2층\t3.3층");
// System.out.println("다시 입력해주세요.");
// System.out.println("목적지로 현재 층은 안됩니다.");
// System.out.println("입력하신 층은 " + + "층입니다.");
// System.out.println("현재 층수는" + + "층 입니다.");
// System.out.println( + "명이 하차하였습니다.");
// System.out.println("---- 탑승 현황 ----");
// System.out.println("현재 탑승 인원은 " + + "명 입니다.");
// System.out.println("현재 층수는 " + + "층 입니다.");
// System.out.println("종료합니다.");
// System.out.println("잘못입력하였습니다.");
//
//
// System.out.println("엘리베이터 상태[현재층 : " + + "]");
// System.out.print("[" + + "]");
// System.out.print("[ ]");
// System.out.println("행동을 입력하세요.");
// System.out.println("1.이동 2.탑승 9.종료");
// System.out.println("어디에 탑승하시겠습니까?[취소 : 9]");
// System.out.print("[불가능]");
// System.out.print("[" + + "]");
// System.out.println("몇층으로 가시겠습니까?[현재층 : " + + "]");
// System.out.println("갈 수 없는 층입니다.");
// System.out.println("잘못입력하셨습니다.");
// System.out.println("엘리베이터 운행을 종료합니다.");
//
}
<ElevatorService>
package com.elevator.service;
import java.util.Scanner;
// 실수 지점
/*
0. 이전 지하철문제의 easy version이여서 수월했다.
1. floor를 현재층 받는거 아니면 굳이 필요없음, 층은 승객의 값으로 넣어주면됨
2. break 다음 reuturn 은 도달할수없음
3. if는 / while은 조건작성할 때 해매지 말고 잘하자!
*/
public class ElevatorService {
int[] passangers; //4명 가능 => 값이
// int[] floor; // 3개의 층 (0층 미탑승)
int floor;
boolean direction;
public ElevatorService() {
// TODO Auto-generated constructor stub
passangers = new int[4];
// floor = new int[3];
for(int i = 0 ; i < passangers.length ; i++)
passangers[i] = 0;
// for(int i = 0 ; i < floor.length ; i++)
// floor[i] = i + 1;
floor = 1;
direction = true;
}
public void run() {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
SHUTDOWN :
while(true) {
System.out.println("메뉴를 선택하세요.");
System.out.println("1.탑승 2.이동 3.탑승현황 4.종료");
switch(sc.nextLine()) {
case "1" : ride();
break;
case "2" : move();
break;
case "3" : status();
break;
case "4" : System.out.println("종료합니다.");
break SHUTDOWN;
default : System.out.println("잘못입력하셨습니다. 다시 입력해주세요 ");
}
System.out.println("현재 층수는 " + floor + "층 입니다 ");
}
sc.close();
}
private void ride() {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
int passanger = 0;
int input = 0;
//미탑승 승객 가려내기 용
for(int i = 0 ; i < passangers.length ; i++) {
if(passangers[3] != 0 ) {
System.out.println("탑승할 공간이 없습니다.");
return ;
}
else if(passangers[i] == 0){
System.out.println("층 수를 선택해 주세요.");
System.out.println("1.1층\t2.2층\t3.3층");
passanger = i;
break;
}
}
//탑승했다면
do{
input = scan.nextInt();
passangers[passanger] = input;
System.out.printf("입력하신층은 %d층입니다. \n",input);
if((input < 0 || input > 4 )) {
System.out.println("목적지로 입력한 층은 안됩니다. ");
System.out.println("다시 입력해주세요.");
}
else if(input == floor) {
System.out.println("현재 층입니다. ");
System.out.println("다시 입력해주세요.");
}
}while(((input < 0 || input > 4 ) || input == floor));
scan.close();
}
private void move() {
// TODO Auto-generated method stub
System.out.println();
int count = 0; //하차 카운트
//위아래로 엘베 움직이기
if(direction == true)
floor++ ;
else
floor-- ;
//엘베 방향성 결정
if(floor == 3)
direction = false;
else if(floor == 1)
direction = true;
//하차승객 수 계산
for(int i = 0 ; i < passangers.length ; i++) {
if(passangers[i] == floor) {
passangers[i] = 0;
count ++;
}
}
System.out.println(count + "명이 하차하였습니다. ");
}
private void status() {
// TODO Auto-generated method stub
System.out.println("---- 탑승 현황 ----");
int count = 0; //탑승 카운트
//0층이 없으면 카운트업
for(int i = 0 ; i < passangers.length ; i++)
if(passangers[i] != 0)
count ++;
System.out.println("현재 탑승 인원은 " + count + "명 입니다.");
}
}
3. 정답 코드
상동
4. 보충 및 회고
(1) 보충
객체지향으로 시도해보는것도 바람직할것 같다.
(2) 회고 : 문제풀이과정에서 어떻게 접근하려고했는지 (접근방법) + 어려움이 있었는데 해결했다.
0. 이전 지하철문제의 easy version이여서 수월했다.
1. floor를 현재층 받는거 아니면 굳이 필요없음, 층은 승객의 값으로 넣어주면됨
floot를 할때 좀 더 자료에 대해서 고민해보자!
2. break 다음 reuturn 은 도달할수없음
나의 경우에 이렇게 해서 경고문에 unreachable이 떳다.
이거에 대해서 무슨의미인지 고민을 제대로 안해보았다
이런점에 비추어 보면은 경고문등을 꼼꼼히 읽어보자!
3. if는 시작 / while은 조건작성할 때 해매지 말고 잘하자!
이번에도 조건문 설정에서 하나씩 돌려보고 판단하는 하드코딩을 했다
do -while문을 쓸 때 if절과 while절의 조건은 동일하다!
'문제풀이 > 일일연습문제' 카테고리의 다른 글
[Servlet]사용자 입력을 통한 계산 요청 (0) | 2023.03.07 |
---|---|
일일문제 : 10번째- 230104 [1-1-수] - 평균출력, 로또 (0) | 2023.01.04 |
일일문제 : 7번째- 221221 [12-3-수] - 객체지향 위인전 (1) | 2022.12.21 |
일일문제 : 6번째- 221220 [12-3-화] - 1차 함수 (1) | 2022.12.20 |
일일문제 : 5번째- 221219 [12-3-월] - 함수화 / 피라미드 (0) | 2022.12.19 |