MeetingRoom2 응용 (정)

2020. 8. 26. 19:07·개발중/Algorithm
728x90
반응형

미팅룸 알고리즘을 배웠는데

사용자에게 입력을 받아서 처리를 하는 프로그램으로 응용해보고 싶다는 생각이 들어서,  완성

 

package soobin;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;

class Interval4 {

	int start;
	int end;

	Interval4() {
		start = 0;
		end = 0;
	}

	Interval4(int s, int e) {
		start = s;
		end = e;
	}
}

public class MeetingRoom2c {

	public static void main(String[] args) {

		MeetingRoom2c m = new MeetingRoom2c();
		Scanner sc = new Scanner(System.in);
		int check;

		do {

			System.out.print("\n start: ");
			int start = sc.nextInt();

			System.out.print(" end  : ");
			int end = sc.nextInt();

			Interval4 in1 = new Interval4(start, end);

			check = m.solve(in1);

		} while (check == 1);
	}

	public int solve(Interval4 interval) {

		Scanner sc = new Scanner(System.in);
		int iNum = 0;

		if (list.isEmpty()) {
			
			list.add(interval);
			System.out.println("첫번째 미팅룸이 예약되었습니다");
			return 1;
		}

		// 받은 interval 을 추가한다
		list.add(interval);
		
		// 오름차순으로 정렬한다 start 기준
		list.sort(Comp);

		for (int i = 0; i < list.size(); i++) {
			if (list.get(i) == interval) {
				iNum = i;
				break;
			}
		}

		int s = list.size();

		for (int i = 0; i < s; i++) {
			System.out.println(" [ " + i + "] " + list.get(i).start + " ~ " + list.get(i).end);
		}

		int bNum = iNum - 1;
		int aNum = iNum + 1;

		int a, b =0;
		
		
		if (s == aNum) {
			
			if (list.get(bNum).end > interval.start) {

				print(1);
				return 1;
			}
		} else if (-1 == bNum) {
			
			if (list.get(aNum).start < interval.end) {
				
				print(1);
				return 1;
			}
		} else if (list.get(bNum).end > interval.start || list.get(aNum).start < interval.end) {
			
			print(1);
			return 1;

		}

		print(2);
		return 1;
	}

	public void print(int i) {
		
		if (i == 1) {
			System.out.println("원하는 시간대에 사용하는 미팅룸이 있어서 새로운 미팅룸을 추가합니다.");
			System.out.println("현재 미팅룸 :" + ++total);
		} else if( i == 2 ) {
			System.out.println("중복되는 미팅룸이 없습니다.");
		}
	}

	List<Interval4> list = new ArrayList<>();
	Queue<Interval4> heap = new PriorityQueue<Interval4>();
	int total = 0;

	Comparator<Interval4> Comp = new Comparator<Interval4>() {

		@Override
		public int compare(Interval4 o1, Interval4 o2) {
			return o1.start - o2.start;
		}
	};

}

 

if 문에 해당된다면

이미 미팅룸이 사용중인 시간이라는 의미다.

 

 

 

 

 

 

 

 

 

 

 

 

원하는 시간대에 사용 가능하다는 의미이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

내가 입력한 데이터의 위치를 알아냈다.

오름차순으로 정렬 했기 때문에 내 위치를 파악하고 앞 뒤로 검사를 했다

 

 

 

현재 데이터 앞에 있는 데이터를 bNum 

현재 데이터 뒤에 있는 데이터를 aNum 

 

 

s는 리스트의 size를 의미.

 

리스트의 사이즈와 다음 사이즈가 같다면 내 뒤쪽은 검사할 필요가 없다.

 

 

 

 

 

 

 

 

 

내가 입력한 start보다 내 앞에 있는 데이터의 end가 더 크다면 중복

 

 

 

 

 

 

 

 

 

 

 

 

bNum 이 -1 이라면

내 앞에는 데이터가 존재하지 않는다.

 

내 뒤에만 검사하겠다.

 

 

 

 

 

 

 

 

 

 

이도 저도 아니다!

내 앞 뒤에 모두 검사할 데이터가 존재한다.

 

 

 

 

 

 

 

 

 

 

 

 

[ TEST ]

728x90
반응형

'개발중 > Algorithm' 카테고리의 다른 글

LicensKeyFormatting  (0) 2020.08.26
JewelsAndStones  (0) 2020.08.26
MeetingRoom2  (0) 2020.08.25
Merge 알고리즘  (0) 2020.08.24
Daily Temperature  (0) 2020.08.23
'개발중/Algorithm' 카테고리의 다른 글
  • LicensKeyFormatting
  • JewelsAndStones
  • MeetingRoom2
  • Merge 알고리즘
Binsoo
Binsoo
내 트러블 슈팅
  • Binsoo
    정수빈 기술블로그임.
    Binsoo
  • 전체
    오늘
    어제
    • 빈수 개발자 개발 일기 (930)
      • 개발중 (632)
        • Spring Boot (95)
        • Spring Security (2)
        • Spring Batch (6)
        • Spring Boot & Redis (13)
        • Java Persistence API (JPA) (28)
        • Web (42)
        • Rest Api (7)
        • Spring Concurrency Control (3)
        • Redis (8)
        • Kubernetes (k8s) (4)
        • MYSQL (35)
        • AirFlow (15)
        • Docker (2)
        • Git (22)
        • Linux (9)
        • JSON Web Tokens (JWT) (4)
        • Troubleshooting (87)
        • Swagger (0)
        • Vue.js (52)
        • Java (74)
        • html (12)
        • C (5)
        • jQuery (15)
        • JavaServer Pages (JSP) (17)
        • Arduino (1)
        • JavaScript (35)
        • Amazon Web Services (AWS) (11)
        • Algorithm (9)
        • 참고 기능 (16)
        • mongo (2)
      • PROJECT (27)
        • 스프링부트+JPA+몽고 API 개발 (3)
        • MINI (2)
        • 게시판 (3)
        • vue 프로젝트 (1)
        • JPA 사이드 프로젝트 기록 (17)
      • TEAM STUDY (156)
        • 가상 면접 사례로 배우는 대규모 시스템 설계 기초 (8)
        • 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (12)
        • NAVER DEVELOPER (4)
        • LINUX (23)
        • PYTHON (19)
        • SERVER (8)
        • 알고리즘 코딩 테스트 스터디 (31)
        • 쿠버네티스 (40)
        • 대세는 쿠버네티스 [초급~중급] (11)
      • BOOK (0)
      • 자격증 (61)
        • 리눅스 1급 - 필기 기록 (19)
        • 네트워크 관리사 (2)
        • 네트워크 관리사 2급 - 실기 기록 (21)
        • 네트워크 관리사 2급 - 필기 기록 (16)
        • 정보처리 (2)
      • 직장인 대학원 (17)
        • 기록 (1)
        • 캐글 스터디 (3)
        • R (12)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리눅스 마스터 요약
    git
    네트워크 관리사 학점
    리눅스 마스터 1급
    쿠버네티스 스터디
    리눅스 마스터
    쿠버네티스
    리눅스 마스터 1급 요약
    리눅스 1급 요약
    스프링
    springboot
    파이썬
    리눅스 마스터 1급 정리
    네트워크 관리사 2급
    알고리즘
    docker
    jpa
    BackendDevelopment
    네트워크 관리사
    네트워크 관리사 자격증
    Git 저장소
    Spring
    REST API
    java
    redis
    네트워크 관리사 요약
    네트워크 관리사 2급 실기
    네트워크 관리사 실기
    VUE
    파이썬 알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Binsoo
MeetingRoom2 응용 (정)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.