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. 문제 파악
- 의자가 한정적이기 때문에 의자가 꽉 차게 되면 가장 오랫동안 앉아있었던 동물이 나오고 새로운 동물이 의자에 앉게 됩니다. 가장 최근에 앉은 동물이 맨 마지막 의자에 앉게 됩니다.
- 이때, 같은 종이 들어올 경우에는 무릎에 앉을 수 있기 때문에 의자에 앉아있는 동물의 종을 파악할 수 있어야 합니다. 같은 종의 동물이 어떤 의자에 앉아있을지 모르기 때문에 모든 인덱스 접근이 용이한 List 자료구조를 사용하는 방법이 유리합니다.
- '초'와 '분'을 계산하기 위해서 '초'를 중심으로 '분'은 60초로 계산하여 전체 수행 시간을 구해야 합니다.
2. 풀이
- 동물의 수만큼 반복문을 돌려서 실행 시간을 확인해야 합니다.
- 동물이 들어오게 되면, 같은 종이 이미 의자에 앉았는지 확인하기 위해서 contains 메소드를 사용합니다. 만약 있다면, 해당 값을 삭제하고 다시 리스트에 추가해 줍니다. 이때 소요시간은 1초입니다.
if (의자.contains(i)) {
의자.remove(i);
의자.add(i);
answer += 1;
}
- 동일한 종이 없다면 의자가 꽉 찼는지를 확인해서 꽉차있다면, 리스트의 앞 부분에 있는 동물을 내보내야 합니다. 그리고 동물을 새로 추가해 줍니다. 소요시간은 1분이기 때문에 60을 더합니다.
else {
if (의자.size() >= 3) {
의자.remove(0);
}
의자.add(i);
answer += 60;
}