차량 정비소

정답 소스와 비교해서 보면 어떤 정보를 저장해야할지, 대략적인 로직은 거의 맞은 것 같았다. 하지만 다른 정답 코드들과 가장 큰 차이점은, 내 코드에는 대기 시간에 대한 로직이 없다는 것이다.

내가 생각했을 때는 대기시간을 고려하지 않고, 접수시작시간, 접수완료시간, 정비시작시간, 정비완료시간만 고려해서 그때마다 접수창구, 정비창구번호를 저장해주어도 틀리지 않을 것이라 생각했다.

하지만 이 부분에서 답과 오답을 가르는 것이였을까.

틀린 부분

  1. 정비 창구로 이동할 때, 접수 창구 번호가 작은 순서로 오름차순 정렬하고, 0번째 사람부터 반복문을 돌렸는데, 그게 아니라 접수 완료된 시간이 작은 사람부터 해야하기 때문에 정렬 기준은 2가지가 작용한다. ① if(접수 창구 번호 오름차순 정렬) 접수 완료 시간이 같으면(동시에 끝나면) : 접수 창구 번호가 작은 사람이 우선 ② else(접수 완료 시간 오름차순 정렬)

배운 점 https://choichumji.tistory.com/119 객체 배열 정렬 기준 레퍼런스

객체를 저장하는 배열을 정렬하기 위한 정렬 기준을 만든다. 정렬은 Arrays.sort()나 Collections.sort()를 사용하는데, 정렬기준을 정할 수 있다.

  1. 람다식 : 정렬은 일회성이기 때문에 람다식으로 Comparator를 간결하게 쓸 수 있다. (c1,c2)는 coffees 객체 배열에 저장된 coffee객체이다! Coffee c1, Coffee c2를 의미한다!

    Arrays.sort(coffees, (c1, c2) -> Integer.compare(c1.getPrice(),c2.getPrice()));

    원래 코드 c1.getPrice()가 더 크면 결과값이 양수이기 때문에 자리바꿈이 일어난다! c1.price == c2.price : 0리턴 c1.price == c2.price : 음수 리턴 c1.price == c2.price : 양수 리턴 => 자리바꿈 일어남!

    Arrays.sort(coffees, new Comparator<Coffee>() {
        @Override
        public int compare(Coffee c1, Coffee c2) {
          return Integer.compare(c1.getPrice(),c2.getPrice());
        }
    });
  2. Comparator 오버라이딩해서 클래스로 생성

Comparator<Player> comparator = new Comparator<Player>() {
    @Override
    public int compare(Player a, Player b) {
        return b.getScore() - a.getScore();
    }
};

Collections.sort(players, comparator);
static Comparator<Customer> Comp = new Comparator<Customer>() {
		@Override
		public int compare(Customer c1,Customer c2) {
			if(c1.finishRecep == c2.finishRecep) {
				return c1.recepNum - c2.recepNum;
			} else {
				return c1.finishRecep-c2.finishRecep;
			}
		}
	};

Last updated