728x90
🎈섹션3. 자료구조 활용 섹션 -(2)
🟦 3-4. 피부과
문제 풀이
첫 시도 코드
- 이 문제는 enter 가 최대 100,000 이므로 이중 for문을 돌면 안되는데 도저히 해결 방법이 떠오르지 않아서 이중 for 문 사용하고 답은 나왔다. .
package to_0501;
/* 3-4. 피부과 문제풀이 -> 이중 for 돌지 않아야 함 ㅠ
* */
import java.util.ArrayList;
class Person {
int inTime;
int outTime;
Person(int inTime, int outTime){
this.inTime = inTime;
this.outTime =outTime;
}
}
class Solution1 {
//시간 HH:MM -> M분으로 변경
public int getTime(String x) {
//HH
int H = Integer.parseInt(x.split(":")[0]);
int M = Integer.parseInt(x.split(":")[1]);
return 60 * H + M;
}
//솔루션 함수
public int solution(int[] laser, String[] enter){
int answer = 0;
ArrayList<Person> arr = new ArrayList<>();
//환자 0번 제외부터 카운팅해야 함
for(int i =0; i<enter.length ;i++) {
String x = enter[i];
//들어온 시간
int InTime = getTime(x.split(" ")[0]);
//시술 시간
int Ing = laser[Integer.parseInt(x.split(" ")[1])];
//나가는 시간
int outTime = InTime + Ing;
//여기에 담고
arr.add(new Person(InTime, outTime));
}
for(int i=0; i<arr.size(); i++) {
int a= arr.get(i).inTime;
int b= arr.get(i).outTime;
int cnt = 0;
for(int j = i+1; j<arr.size(); j++) {
if(a < arr.get(j).inTime && b>arr.get(j).inTime) {
cnt++;
}
}
answer = Math.max(answer, cnt);
}
return answer;
}
//실행 메인
public static void main(String[] args){
Solution1 T = new Solution1();
System.out.println(T.solution(new int[]{30, 20, 25, 15}, new String[]{"10:23 0", "10:40 3", "10:42 2", "10:52 3", "11:10 2"}));
System.out.println(T.solution(new int[]{30, 20, 25, 15}, new String[]{"10:23 0", "10:40 3", "10:42 2", "10:52 3", "15:10 0", "15:20 3", "15:22 1", "15:23 0", "15:25 0"}));
System.out.println(T.solution(new int[]{30, 20, 25, 15}, new String[]{"10:20 1", "10:40 1", "11:00 1", "11:20 1", "11:40 1"}));
}
}
728x90
'알고리즘 이론 [개념] > [개념] 코테 알고리즘 공부 - 시즌 2' 카테고리의 다른 글
섹션3. 자료구조 활용 섹션 -(4) (0) | 2023.05.04 |
---|---|
섹션3. 자료구조 활용 섹션 -(3) (0) | 2023.05.02 |
섹션3. 자료구조 활용 섹션 - (1) (0) | 2023.04.28 |
섹션2. 해싱 & 시간 파싱 알고리즘 - (4) (0) | 2023.04.27 |
섹션2. 해싱 & 시간 파싱 알고리즘 - (3) (0) | 2023.04.26 |