inblog logo
|
LHS's Study Space
    알고리즘문제풀기랜덤마라톤

    [랜덤 마라톤] Feeding Seals(17799)

    lhs's avatar
    lhs
    Dec 08, 2024
    [랜덤 마라톤] Feeding Seals(17799)
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리
    www.acmicpc.net
    https://www.acmicpc.net/problem/17799
    notion image
    notion image

    1. 문제 풀이 아이디어

    • 양 끝에서부터 두 포인터를 사용하면 문제를 효율적으로 해결할 수 있다.
    • 두 포인터가 가리키는 값의 합이 c 이하라면, 두 양동이는 한 번에 운반하는 것으로 처리하고 두 포인터를 각각 옮긴다.

    2. 나의 정답 코드

    public class Main { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine()); int n = Integer.parseInt(stringTokenizer.nextToken()); int c = Integer.parseInt(stringTokenizer.nextToken()); stringTokenizer = new StringTokenizer(bufferedReader.readLine()); List<Integer> list = new ArrayList<>(); for (int i = 0; i < n; i++) { list.add(Integer.parseInt(stringTokenizer.nextToken())); } list.sort(Comparator.naturalOrder()); int s = 0, e = list.size() - 1; int result = 0; while (s <= e) { if (list.get(s) + list.get(e) <= c) { s++; } result++; e--; } System.out.println(result); bufferedReader.close(); } }

    3. 정리

    • 입력된 양동이 무게를 list에 저장한 뒤, 오름차순으로 정렬한다.
    • 두 포인터 s와 e를 각각 리스트의 시작과 끝으로 설정한다.
    • e가 s보다 크거나 같을 동안 while문을 순회한다.
    • 두 포인터가 가리키는 값의 합이 c 이하라면 s를 증가시킨다.
    • 결과값을 증가시키고, e를 감소시킨다.
    • 이 과정을 반복하여 필요한 자원봉사자 수를 계산하고 출력한다.
    Share article
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리

    LHS's Study Space

    RSS·Powered by Inblog