| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
													Tags
													
											
												
												- php
- 백준
- JAVA SPRING
- Java
- Flutter
- 플러터 개발환경 설정
- php 프로그래밍 입문 3판
- programmers
- SWEA
- spring
- php 프로그래밍 입문
- php 프로그래밍 입문 문제풀이
- php 프로그래밍 입문 솔루션
- C언어
- 최단 경로
- 배열
- 파이썬
- 플러터
- php 프로그래밍 입문 예제
- 페이코 추천인
- 자바 스프링
- php 프로그래밍
- 페이코 추천인코드
- 스프링
- C
- 페이코 초대코드
- 한정 분기
- php 프로그래밍 입문 연습문제
- 자바
- 페이코 친구코드
													Archives
													
											
												
												- Today
- Total
ImJay
[SWEA/Java] 4408. 자기 방으로 돌아가기 본문
반응형
    
    
    
  [SWEA/Java] 4408. 자기 방으로 돌아가기
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
해설

풀이
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
			
		
	
               
           
					
					
					
					
					
					
				 
								 
								 
								