[BOJ/Gold1] 1700번 멀티탭 스케줄링 - JAVA[자바]

2025. 2. 9. 17:23·PS/백준
목차
  1. 문제 풀이
  2. 1차 시도 - 통과

난이도 : 골드 1

유형 : 그리디 / 구현

링크 : https://www.acmicpc.net/problem/1700

구현 시간 : 1시간

 

 

백준 이미지

 

 

 

문제 풀이

 

이 문제는 그리디 알고리즘 유형으로, 멀티탭에 꽂힌 전기용품 중 어떤 것을 제거해야 하는지 결정하는 문제입니다.

 

멀티탭의 상태를 관리하기 위해 삭제 및 삽입이 용이한 List 자료구조를 사용하여 구현하였습니다.

  • 현재 멀티탭이 비어있거나 빈 구멍이 있는 경우
    • 새로운 전기용품을 그대로 꽂습니다.
  • 새로운 전기용품이 이미 멀티탭에 꽂혀 있는 경우
    • 추가적인 작업 없이 그대로 넘어갑니다.
  • 멀티탭이 꽉 찬 상태에서 새로운 전기용품이 등장할 경우 (🔥핵심)
    • 1. 이후 사용되지 않는 전기용품이 있다면
      • 해당 전기용품을 제거합니다.
    • 2. 모든 전기용품이 이후에도 사용된다면
      • 가장 마지막에 사용될 전기용품을 제거하면, 이후의 변경 횟수를 최소화할 수 있습니다.

 

 

1차 시도 - 통과

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()); // 전기용품 사용 횟수
        int[] arr = new int[K]; // 전기용품 사용 순서

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < K; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        List<Integer> plugged = new ArrayList<>(); // 현재 꽂혀 있는 전기용품
        int cnt = 0;

        for (int i = 0; i < K; i++) {
            int current = arr[i];

            // 이미 꽂혀 있는 경우
            if (plugged.contains(current)) {
                continue;
            }

            // 멀티탭에 빈 공간이 있는 경우
            if (plugged.size() < N) {
                plugged.add(current);
                continue;
            }

            // 전기용품을 교체해야 하는 경우
            int lastUseItem = -1;
            Integer removeTarget = -1;

            for (Integer item : plugged) {
                int nextUse = Integer.MAX_VALUE; // 사용 예정이 없을 경우 방지
                for (int j = i; j < K; j++) {
                    if (arr[j] == item) {
                        nextUse = j;
                        break;
                    }
                }

                if (nextUse > lastUseItem) {
                    lastUseItem = nextUse;
                    removeTarget = item;
                }
            }

            plugged.remove(removeTarget);
            plugged.add(current);
            cnt++;
        }

        System.out.println(cnt);
    }
}

'PS > 백준' 카테고리의 다른 글

[BOJ/Gold4] 12869번 뮤탈리스크 - JAVA[자바]  (1) 2025.02.20
[BOJ/Silver2] 18353번 병사 배치하기 - JAVA[자바]  (1) 2025.01.27
[BOJ/Gold5] 15686번 치킨 배달 - JAVA[자바]  (1) 2025.01.15
[BOJ/Gold3] 1005번 ACM Craft - JAVA[자바]  (0) 2025.01.09
[BOJ/Gold3] 11779번 최소비용 구하기 2 - JAVA[자바]  (0) 2025.01.08
  1. 문제 풀이
  2. 1차 시도 - 통과
'PS/백준' 카테고리의 다른 글
  • [BOJ/Gold4] 12869번 뮤탈리스크 - JAVA[자바]
  • [BOJ/Silver2] 18353번 병사 배치하기 - JAVA[자바]
  • [BOJ/Gold5] 15686번 치킨 배달 - JAVA[자바]
  • [BOJ/Gold3] 1005번 ACM Craft - JAVA[자바]
hongjeZZ
hongjeZZ
백엔드 개발자로서의 성장 과정을 기록합니다.
  • hongjeZZ
    Hong's Dev Note
    hongjeZZ
  • 전체
    오늘
    어제
    • 분류 전체보기 (40)
      • Back-End (9)
        • Java (0)
        • Spring (9)
        • Docker & Kubernetes (0)
      • Database (0)
        • MySQL (0)
        • Redis (0)
        • 데이터베이스 (0)
      • CS (4)
        • 운영체제 & 네트워크 (1)
        • 아키텍쳐 & 분산시스템 (0)
      • 회고 (0)
      • PS (27)
        • 백준 (16)
        • 알고리즘 (2)
        • 프로그래머스 (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    Spring
    큐
    운영체제
    문자열
    CS
    Stomp
    시뮬레이션
    mongodb
    스택
    그래프 이론
    웹소켓
    dfs
    Redis
    컴퓨터구조
    우선순위큐
    그리디
    spirng boot
    BFS
    구현
    DP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
hongjeZZ
[BOJ/Gold1] 1700번 멀티탭 스케줄링 - JAVA[자바]
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.