• Home

My Codegate

  • Home

백준 2891 카약과 강풍 자바 문제풀이

2023/12/06 Posted by Codegate Java No Comments
백준 2891 카약과 강풍 자바 문제풀이

문제 링크

문제 내용은 입력으로 첫 줄에 전체 카약 수, 카약 파손된 수, 스페어 카약이 있는 수를 받은 뒤
두 번째 입력으로는 파손된 카약의 번호를 받고 마지막 입력으로는 스페어 카약이 있는 번호를 받게 되는데 스페어 카약은 번호 위치부터 좌우로만 전해줄 수 있고, 본인의 카약도 파손된 경우에는 남에게 줄 수 없다. 이제 최선의 경우를 구해서 손상된 카약이 총 몇개인지 구해줘야 한다.

주의할 점은 스페어를 든 사람의 카약이 파손되는 경우가 있을 수 있기에 이걸 조심해줘야 한다

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] split = br.readLine().split(" ");
        ArrayList<Integer> miss = Arrays.stream(Arrays.stream(br.readLine().split(" "))
                        .mapToInt(Integer::parseInt).toArray())
                .boxed().collect(Collectors.toCollection(ArrayList::new));
        ArrayList<Integer> spare = Arrays.stream(Arrays.stream(br.readLine().split(" "))
                        .mapToInt(Integer::parseInt).toArray())
                .boxed().collect(Collectors.toCollection(ArrayList::new));
        int[] entire = new int[Integer.parseInt(split[0])];
        Arrays.setAll(entire, i -> i + 1);

        int count = 0;

        ArrayList<Integer> missRemove = new ArrayList<>();
        for(int i : miss) {
            if(spare.contains(i)) {
                missRemove.add(i);
                spare.removeIf(v -> v == i);
                count++;
            }
        }

        for(int i : missRemove) {
            miss.removeIf(v -> v == i);
        }

        for(int i = 0; i<entire.length; i++) {
            int index = i;
            if(miss.contains(entire[i])) {
                if(spare.contains(entire[i] - 1)) {
                    spare.removeIf(val -> val == entire[index] - 1);
                    count++;
                    continue;
                }

                if(spare.contains(entire[i] + 1)) {
                    spare.removeIf(val -> val == entire[index] + 1);
                    count++;
                }
            }
        }
        System.out.println(Integer.parseInt(split[1]) - count);
    }
}

일단 손상된 카약과 스페어 카약을 List에 담아준 후 손상된 카약과 스페어 카약 값이 같은 경우를 모두 제외하고 처음부터 끝까지 돌려 주면서 손상된 카약을 발견하면 왼쪽부터 먼저 건네주는 식으로 진행해준 뒤 전체 손상된 카약 수에서 스페어를 전해준 경우를 빼주면 끝이다.

No Comments
0

Leave a Reply Cancel Reply

Introduction

My Codegate

Latest Posts

  • Google Search Console API 연동방법
  • 인텔리제이 Gradle Dependency 최신 버전 보는 방법
  • Wallet-Tracker 개발일지
  • Moralis API 자바로 호출방법
  • IntelliJ Commit 후 Push 따로 하는 방법

Categories

  • My Project (4)
  • Java (42)
  • Algorithm (161)
    • Java (152)
    • Algorithm Knowledge (3)
    • Algorithm site usage (6)
  • Vue.js (1)
  • Spring (4)
  • Docker (2)
  • IntelliJ (20)
  • Uncategorized (7)

Recent Comments

  • Codegate on Hello world!
  • A WordPress Commenter on Hello world!

© 2025 — mycodegate.com

Prev Next