11월 15일(수) - 그리디 알고리즘 (1700번)
1700번: 멀티탭 스케줄링
기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전
www.acmicpc.net
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
문제점
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이
(풀이출처 -> https://loosie.tistory.com/484 )
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
int[] seq = new int[K+1];
List<Integer> list = new ArrayList<>();
for(int i=0; i<K; i++)
{
list.add(Integer.parseInt(st.nextToken()));
}
Set<Integer> set = new HashSet<>();
int count = 0;
for(int i=0; i<K; i++)
{
int num = list.get(i);
if(set.contains(num))
{
continue;
}
if(set.size() < N && set.add(num))
{
continue;
}
int max = -1;
int idx = -1;
for(int s : set)
{
int tmp = 0;
List<Integer> sub = list.subList(i+1, K);
if(sub.contains(s))
{
tmp = sub.indexOf(s) + 1;
}
else
{
tmp = K-i-1;
}
if(tmp > max)
{
max = tmp;
idx = s;
}
}
set.remove(idx);
set.add(num);
count++;
}
System.out.println(count);
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
'백준(Java) > 23년 11월' 카테고리의 다른 글
[Java] 백준 - 2644번: 촌수계산 (0) | 2023.11.17 |
---|---|
[Java] 백준 - 15686번: 치킨 배달 (0) | 2023.11.16 |
[Java] 백준 - 1976번: 여행 가자 (0) | 2023.11.14 |
[Java] 백준 - 2133번: 타일 채우기 (0) | 2023.11.13 |
[Java] 백준 - 2206번: 벽 부수고 이동하기 (0) | 2023.11.10 |
댓글