일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 페이코 추천인
- Java
- JAVA SPRING
- php
- 백준
- C
- 최단 경로
- Flutter
- php 프로그래밍 입문 예제
- C언어
- php 프로그래밍 입문
- 자바
- 플러터 개발환경 설정
- php 프로그래밍
- 파이썬
- php 프로그래밍 입문 3판
- 자바 스프링
- 스프링
- spring
- SWEA
- php 프로그래밍 입문 연습문제
- 한정 분기
- programmers
- 페이코 초대코드
- 페이코 친구코드
- 페이코 추천인코드
- 플러터
- 배열
- php 프로그래밍 입문 솔루션
- php 프로그래밍 입문 문제풀이
Archives
- Today
- Total
11-07 11:40
ImJay
[SWEA/Java] 4408. 자기 방으로 돌아가기 본문
반응형
[SWEA/Java] 4408. 자기 방으로 돌아가기
해설
풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int testCase = Integer.parseInt(br.readLine());
// 테스트 케이스 수만큼 반복
for (int t = 1; t <= testCase; t++) {
int n = Integer.parseInt(br.readLine()); // 돌아가야 할 학생 수
ArrayList<ArrayList<Integer>> array = new ArrayList<>();
// 학생들의 현재 방과 돌아가야 할 방 입력 받기
for (int i = 0; i < n; i++) {
String input = br.readLine();
StringTokenizer st = new StringTokenizer(input);
int s = Integer.parseInt(st.nextToken()); // 현재 방 번호
int e = Integer.parseInt(st.nextToken()); // 돌아가야 할 방 번호
// 방 번호가 큰 것을 뒤로 정렬하기 위해 조정
if (s > e) {
int tmp = s;
s = e;
e = tmp;
}
// 배열 인덱스 계산을 위해 2로 나누고 인덱스 조정
int si, ei;
if (s % 2 == 0) {
si = s / 2 - 1;
} else {
si = s / 2;
}
if (e % 2 == 0) {
ei = e / 2 - 1;
} else {
ei = e / 2;
}
// 현재 방과 돌아가야 할 방의 인덱스를 리스트에 추가
ArrayList<Integer> list = new ArrayList<>();
list.add(si);
list.add(ei);
array.add(list);
}
// 현재 방의 인덱스를 기준으로 정렬
Collections.sort(array, Comparator.comparing(list -> list.get(0)));
int hour = 0;
// 모든 학생이 자신의 방으로 돌아갈 때까지 반복
while (!array.isEmpty()) {
boolean[] arr = new boolean[200]; // 방이 사용 중인지 여부를 저장하는 배열
for (int k = 0; k < array.size(); k++) {
ArrayList<Integer> list = array.get(k);
boolean status = true;
// 현재 학생의 방부터 돌아가야 할 방까지의 구간을 확인하여 사용 중인지 체크
for (int i = list.get(0); i <= list.get(1); i++) {
if (arr[i]) {
status = false;
break;
}
}
// 사용 중이 아니면 해당 구간을 사용 중으로 변경하고 리스트에서 제거
if (status) {
for (int j = list.get(0); j <= list.get(1); j++) {
arr[j] = true;
}
array.remove(k);
k--;
}
}
hour++; // 한 시간 경과
}
// 결과 문자열에 결과 추가
sb.append("#" + t + " " + hour + "\n");
}
// 결과 출력
System.out.print(sb);
}
}
반응형
'SW Expert Academy > D4' 카테고리의 다른 글
[SWEA/Java] 1210. Ladder1 : 재귀로 풀기 (0) | 2024.02.04 |
---|---|
[SWEA/Java] 1249. 보급로 (0) | 2024.02.04 |
[SWEA/Java] 1210. [S/W 문제해결 기본] 2일차 - Ladder1 (0) | 2024.01.29 |
[SWEA/Java] 8382. 방향 전환 (0) | 2024.01.20 |
[SW Expert Academy] 18799. 평균의 평균 (0) | 2023.11.18 |
Comments