🔎

답안

import java.util.ArrayList; public class Q4 { public static void main(String[] args) { String[] 페이지 = {"척추동물", "어류", "척추동물", "무척추동물", "파충류", "척추동물", "어류", "파충류"}; System.out.println(solution(페이지)); } public static String solution(String[] 페이지) { ArrayList<String> 의자 = new ArrayList<String>(); int answer = 0; for (String i : 페이지) { if (의자.contains(i)) { 의자.remove(i); 의자.add(i); answer += 1; } else { if (의자.size() >= 3) { 의자.remove(0); } 의자.add(i); answer += 60; } } return answer / 60 + "분 " + answer % 60 + "초"; } }
 

1. 문제 파악

  1. 의자가 한정적이기 때문에 의자가 꽉 차게 되면 가장 오랫동안 앉아있었던 동물이 나오고 새로운 동물이 의자에 앉게 됩니다. 가장 최근에 앉은 동물이 맨 마지막 의자에 앉게 됩니다.
  1. 이때, 같은 종이 들어올 경우에는 무릎에 앉을 수 있기 때문에 의자에 앉아있는 동물의 종을 파악할 수 있어야 합니다. 같은 종의 동물이 어떤 의자에 앉아있을지 모르기 때문에 모든 인덱스 접근이 용이한 List 자료구조를 사용하는 방법이 유리합니다.
  1. '초'와 '분'을 계산하기 위해서 '초'를 중심으로 '분'은 60초로 계산하여 전체 수행 시간을 구해야 합니다.

2. 풀이

  1. 동물의 수만큼 반복문을 돌려서 실행 시간을 확인해야 합니다.
  1. 동물이 들어오게 되면, 같은 종이 이미 의자에 앉았는지 확인하기 위해서 contains 메소드를 사용합니다. 만약 있다면, 해당 값을 삭제하고 다시 리스트에 추가해 줍니다. 이때 소요시간은 1초입니다.
    1. if (의자.contains(i)) { 의자.remove(i); 의자.add(i); answer += 1; }
       
  1. 동일한 종이 없다면 의자가 꽉 찼는지를 확인해서 꽉차있다면, 리스트의 앞 부분에 있는 동물을 내보내야 합니다. 그리고 동물을 새로 추가해 줍니다. 소요시간은 1분이기 때문에 60을 더합니다.
    1. else { if (의자.size() >= 3) { 의자.remove(0); } 의자.add(i); answer += 60; }