-개발환경-
IDE : Eclipse IDE for Java Developers Version: 2020-03 (4.15.0) 공부 자료 : www.inflearn.com/course/%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%9E%90%EB%B0%94/lecture/22652 |
-문제-
인터벌들의 모음이 주어질때 , 인터벌의 오버래핑되는 모든 부분을 통합해라.
ex)
Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
-접근법-
접근법
1. 한 인터벌을 (start,end)로 명명할 때 , start를 기준으로 오름차순 정렬을 수행
2. before이라는 인터벌을 담을 객체를 생성후 정렬된 인터벌중 가장 앞 값을 집어 넣는다.
3. 정렬된 인터벌모임을 반복문으로 돌린다. 반복문 내용으로,
case1) before.end >= current.start 일시 ,
before의 start와 end를 갱신 .
(이와같이 명료히 할 수 있는 이유는 초기에 정렬을 해주었기에)
case2) before.end < current.start 일시 ,
before을 result에 저장.
현재의 current를 before로 만듬
4. for문 종료 이후 , before를 result에 저장.
그림으로 나타낸 절차는 아래와 같다.
-MergeInterval.java-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
package codingTest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Interval_{
int start;
int end;
Interval_(){start=0;end=0;}
Interval_(int s,int e){start=s;end=e;}
}
public class MergeInterval {
public static void main(String[] args) {
//TestCase
Interval_ in2=new Interval_(1,3);
Interval_ in1= new Interval_(2,6);
Interval_ in3= new Interval_(8,10);
Interval_ in4= new Interval_(15,18);
List<Interval_> intervals= new ArrayList<>();
intervals.add(in1);
intervals.add(in2);
intervals.add(in3);
intervals.add(in4);
//Procedure
MergeInterval a= new MergeInterval();
List<Interval_> list= a.merge(intervals);
//OutPut
System.out.println("==========================================");
a.print(list);
}
public List<Interval_> merge(List<Interval_> intervals){
if (intervals.isEmpty()) return intervals;
//1.ds
List<Interval_> result= new ArrayList<>();
//sort
print(intervals);//test
Collections.sort(intervals, (a,b)->a.start-b.start);//람다표현식 오름차순
//Collections.sort(intervals,comp ); //기존방식
System.out.println("==========================================");
print(intervals);//test
//2
Interval_ before = intervals.get(0);//[1,3]
for(int i=1;i<intervals.size();i++) {
Interval_ current= intervals.get(i);
if(before.end >= current.start) {
before.end=Math.max(before.end,current.end);
}else {
result.add(before);
before=current;
}
}
if(!result.contains(before)) { //해당 if 문은 없어도 무방해보임, 단 내부 명령어는 쓰여져야 함
result.add(before);
}
return result;
}
void print(List<Interval_> list) {
for(int i=0;i<list.size();i++) {
Interval_ in =list.get(i);
System.out.println(in.start +" "+in.end);
}
}
Comparator comp = new Comparator<Interval_>() {
public int compare(Interval_ a,Interval_ b) {
return a.start-b.start;
}
};
}
|
cs |
-Description
25 : TestCase 객체들을 담을 ArrayList인 intervals을 생성한다.
33 : 구현한 merge함수를 이용하여 문제를 해결한후 결과값 반환
39 : input이 없을 경우 처리
41 : 결과를 담을 ArrayList 형 result 생성
45 : 람다표현식으로 intervals를 start을 기준으로 하여 오름차순으로 정렬
51~64 : 접근법에서 설명한 내용이다.
66 : 결과 result 반환
76 : 람다식을 이용한 정렬을 수행하였으므로 , 이 함수는 이용하지 않았다.

-추가개념-
List , ArrayList , Collections , Lambda 표현식
List는 인터페이스 그리고, ArrayList 및 ,LinkedList,Stack,Vector 는 클래스로 List를 구현.
//List 인터페이스
//순서 o , 중복 허용 ex)대기자 명단
//ex)
//ArrayList,LinkedList,Stack,Vector등
//메소드 (자세 한건 JAVA8 API 문서볼것)
//add -추가
// get,set - 얻어오기, 저장하기.
//indexOf - 검색 (왼쪽부터 오른쪽으로)
//lastIndexOf - 검색 (오른쪽부터 왼쪽으로)
//sort -정렬
//subList - from부터 to 까지 뽑아옴
//int size() - size반환
//isEmpty - 비어있는지 확인
//boolean contains(Object o) - 지정된 객체가 존재하는지 확인
//ArrayList - 동기화 처리가 안되어 있다. -
//vector는 동기화 처리가 되어있다.
//데이터의 저장공간으로 배열을 사용한다. ( Object 배열 )
//메소드
//생성자
//ArrayList()
//ArrayList(Collection c)
//ArrayList(int initialCapacity) -배열의 길이 넣어줌-
//boolean add(Object o)
//void add(int index,Object element)
//boolean addAll(Collection c)
//boolean addAll(int index , Collection c)
//boolean remove(Object o)
//Object remove(int index)
//boolean removeAll(Collection c)
//void clear() - 모든객체삭제
//int indexOf(Object o) - 찾으면 인덱스반환 , 못찾으면 -1 반환
//int lastIndexOf(Object o) - 오른쪽부터 찾음
//boolean contains(Object o) - 지정된 객체가 존재하는지 확인
//Object get(int index) - 객체 읽기
//Object set(int index, Object element) - 수정
//List subList(int fromIndex,int toIndex) - from부터 to 전까지 객체들을 뽑아서 새로운 리스트를 반환
//Object[] toArray() - ArrayList가 가지고 있는 객체 배열을 반환
//boolean isEmpty() - 비어있는지 확인
//void trimToSize() - 빈공간 제거
//int size() -ArrayList에 저장된 객체의 갯수를 반환
Collections 는 정적메소드들의 집합으로 구성된 클래스이다.
//여기에는 컬렉션에서 작동하는 다형성 알고리즘이 포함되어 있다.
1. reverse() 메서드 - 뒤집기
2. sort() 메서드 - 정렬하기
3. copy() 메서드 - 복사본만들기
4. shuffle 메서드 - 무작위로 섞기
-람다(Lambda)표현식-
람다표현식은 함수형 인터페이스를 통해서 사용할수 있다.
함수형 인터페이스는 추상 메소드가 한개뿐인 메소드이다..
자바에서는 @FunctionalInterface 를 인터페이스구문위에 적어서 구분한다고 한다..
람다표현식은 , 파라미터,화살표, 바디(구현부분) 3가지로 나뉜다.
람다 표현식은
1. () -{}
2. () ->"history"
3. () -> {return "history";}
4. 파라미터->{return "history"+a;}
5. (파라미터,파라미터)->"history"
바디(구현부분)에는 return문에 적힐 문장이 온다. return은 생략가능..
파라미터 타입도 생략이 가능..
return 을 적어줄시 {} 을 써야하며 ; 도 붙여줘야한다..
-마침글-
인용
'21년이전 > 국비-JSP' 카테고리의 다른 글
Jquery-태그삭제 (0) | 2021.03.30 |
---|---|
Jquery-태그추가2 (0) | 2021.03.30 |
Jquery-요소(태그)추가 (0) | 2021.03.29 |
Jquery-Plugin 적용 (0) | 2021.03.29 |
Jquery- class 추가 및 제거 (0) | 2021.03.29 |