고을마을 : 나의 코딩 이야기

항해99 7기 9일차 TIL[JAVA 프로그래머스 알고리즘, 객체지향 과제] 본문

항해99 7기/TIL(Today I Learned)

항해99 7기 9일차 TIL[JAVA 프로그래머스 알고리즘, 객체지향 과제]

고을마을 2022. 5. 18. 02:36

2022년 5월 16일 항해9일차.

오늘도 어제와 같이 알고리즘 공부를 했다.

오늘은 알고리즘 모의고사가 있는 날이라 지금까지 풀었던 문제들을 다시한번 풀어보고 조원들에게 설명해보는 시간을 가졌다.

사실 알고리즘 모의고사는 별 걱정없었고 오늘 나의 가장 큰 걱정은 객체지향 과제였다.

문제를 여러봐도 감이 잡히지 않았고, 

결국 에이스 조원의 특강(?)을 듣고 한땀한땀 코딩을 해보게 됐다.

 

전문적인 테스트 코드까지 작성해가면서 보여주는 우리 조의 에이스 분의 코드에 비하면

내 코드는 미천하기 짝이없다.

 

사실 에이스 분의 코드를 내 컴퓨터로 가져와 복사 붙여넣기하고, 그 코드를 계속 보고, 이해하고, 과제를 제출해도 그만이다.

하지만 그러면 내 실력이 향상될까? 라는 의문이 들었다.

그려지지 않아도 머리를 쥐어짜내서 과제의 48% 정도를 해내게 됐다.

 

지금은 새벽 2시 21분이다.

이 시간까지 컴퓨터 앞에서 코드를 쳐본게 인생 처음이다.

사실 내가 작성한 코드가 맞는건지도 잘 모르겠다. 굉장히 비효율적이고 다른 사람은 보기도 힘든 코드...

내일 조원들과 회의를 하거나 기술매니저와 상담을 나눠보면 다 엎어야 할 수도 있는 코드...

 

내가 이 코드를 이 TIL에 올리는 건 나중에 항해99 70일차 정도 됐을때 이 코드를 다시한번 보기 위함이다.

항해 70일차. 그때의 나는 지금 내가 작성한 코드보다 훨씬~~~~ 더~~~~~~~ 깔끔하게 작성할 수 있길.

아래의 코드를 보고 "아 진짜 이랬었구나... 많이 발전한거구나."라고 말 할 수 있길.

 

public class Bus {
    int busNum;
    int intake = 0;
    int passenger;
    int oil;
    int speed;
    boolean status = true;

    public Bus(int busNum, int oil, int speed){
        this.busNum = busNum;
        this.oil = oil;
//        this.passenger = passenger;
        this.speed = speed;
    }

    public void status(boolean status){
        this.status = status;
    }

    public void passenger(int passenger){
        this.passenger=passenger;
    }

    public void take(int passenger) {
        this.passenger++;
        this.intake += 1000;
    }

    public void oil(int passenger){
        this.passenger++;
        this.oil -= 10;
    }

    public int getOil(){
        return oil;
    }

    public int getBusNum() {
        return busNum;
    }

    public int getIntake() {
        return intake;
    }

    public int getPassenger() {
        return passenger;
    }

    public void lowSpeed(int low){
        this.speed = speed-low;
        System.out.println("기존 속도 대비 " +low+ "km/h 줄여 " +this.speed+ "km/h로 운행합니다.");
    }
    public void highSpeed(int high){
        this.speed = speed+high;
        System.out.println("기존 속도 대비 " +high+ "km/h 높여 " +this.speed+ "km/h로 운행합니다.");
    }
    public void BusNumInfo() {
        System.out.println("이 Bus는 " + this.getBusNum() + "번 입니다.");
    }
    public void PassengerInfo(){
        System.out.println("현재 " +this.getPassenger() + "명의 승객이 타고 있습니다.");

    }
    public void intakeInfo(){
        System.out.println("버스 운행 누적요금은 " + this.getIntake() + "원 입니다.");
    }

    public void oilInfo(){
        System.out.println("현재 기름량은 "+ this.getOil() + "L입니다.");
    }
}
public class Human {
    int money;

    public Human(int money) {
        this.money = money;
    }

    public void takeBus(Bus bus) {
        this.money -= 1000;
        bus.take(1);
    }

    public void takeSubway(Subway subway) {
        this.money -= 1500;
        subway.take(1);
    }

    public int getMoney() {
        return money;
    }

}

public class Main {
    public static void main(String[] args) {
        Human stu1 = new Human(10000);
        Human stu2 = new Human(20000);
        Human stu3 = new Human(14000);
        Human stu4 = new Human(15000);
        Human stu5 = new Human(15000);
        Human stu6 = new Human(15000);
        Human stu7 = new Human(15000);
        Human stu8 = new Human(15000);
        Human stu9 = new Human(15000);
        Human stu10 = new Human(15000);
//        Human stu11 = new Human(15000);

        Bus bus100 = new Bus(100,100,50);

        stu1.takeBus(bus100);
        stu2.takeBus(bus100);
        stu3.takeBus(bus100);
        stu4.takeBus(bus100);
        stu5.takeBus(bus100);
        stu6.takeBus(bus100);
        stu7.takeBus(bus100);
        stu8.takeBus(bus100);
        stu9.takeBus(bus100);
        stu10.takeBus(bus100);
//        stu11.takeBus(bus100);


        bus100.BusNumInfo();
        bus100.PassengerInfo();
        bus100.intakeInfo();
        if(bus100.getPassenger()>=11){
            System.out.println("운행불가! 최대승객수는 10명 입니다.");
            return;
        }else{
            System.out.print("운행합니다. ");
        }
        int speed = bus100.speed;
        System.out.println("현재속도 " +speed+ "km/h");
        bus100.oilInfo();
        if(bus100.getOil() >= 11){
            System.out.println("현재의 주유량은 운행에 문제 없습니다.");
        }else if(1<=bus100.getOil()){
            System.out.println("경고: 주유량을 확인해주세요");
        }else if(bus100.getOil() == 0){
            System.out.println("기름이 없습니다. 차고지로 돌아갑니다. 운행종료합니다.");
            return;
        }

        System.out.println("고속도로에 진입합니다. 속도를 올립니다.");
        bus100.highSpeed(80);

        System.out.println("고속도로를 빠져나왔습니다. 속도를 줄입니다.");
        bus100.lowSpeed(80);
    }
}