Java/Java 알고리즘

백준 6811번 Old Fishin’ Hole JAVA 구현해보기

kimc 2022. 1. 31. 17:22

```

백준 6811번 Old Fishin’ Hole JAVA 구현해보기

```

이번 글을 통해 배워갈 내용

  1.  백준 6811번 풀이

 

https://www.acmicpc.net/problem/6811

 

6811번: Old Fishin’ Hole

You will be given 4 integers, one per line, representing trout points, pike points, pickerel points, and total points allowed in that order. You can assume that each integer will be greater than 0 and less than or equal to 100.

www.acmicpc.net

 

백준 6811번 Old Fishin’ Hole는 

난이도 브론즈 등급의 문제로서


송어 한 마리 당 포인트, 

파이크 한 마리 당 포인트, 

피커럴 한 마리 당 포인트, 

최대 포인트

 

을 입력받았을 때

 

최대 포인트를 넘지 않는 범위 내에서 나올 수 있는 모든 수와 경우의 수를 출력해주면 되는 문제입니다.


30분 정도 위에 링크를 방문하셔서 풀어보시고

안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.


오랜만에 객체지향적으로 한번 풀어봤습니다.

 

먼저 GivenPoints를 만들어 주고 입력을 받습니다.

private static class GivenPoints {
    int troutPoints;
    int pikePoints;
    int pickerelPoints;
    int totalPoints;
    ...

결괏값을 저장하는 PossiblePoints를 만듭니다.

private static class PossiblePoints{
    int troutPoints;
    int pikePoints;
    int pickerelPoints;
    ...

 

가능한 결괏값을 모두 찾아줍니다.

private static List<PossiblePoints> findPossiblePoints(GivenPoints points) {

    int maxTroutNum = points.getTotalPoints() / points.getTroutPoints();
    int maxPikeNum = points.getTotalPoints() / points.getPikePoints();
    int maxPickerel = points.getTotalPoints() / points.getPickerelPoints();
    List<PossiblePoints> possiblePoints = new ArrayList<>();

    for (int i = 0; i<= maxTroutNum; i++){
        for (int j = 0; j<= maxPikeNum; j++){
            for (int k = 0; k<= maxPickerel; k++){
                int curPoint = i * points.getTroutPoints()
                        + j * points.getPikePoints()
                        + k * points.getPickerelPoints();
                if(curPoint <= points.getTotalPoints() && curPoint != 0){
                    possiblePoints.add(new PossiblePoints(i,j,k));
                }
            }
        }
    }

    return possiblePoints;
}

결과값을 출력합니다.

possiblePoints.forEach(pp-> System.out.println(
        pp.getTroutPoints() + " Brown Trout, "+ pp.getPikePoints() +" Northern Pike, "+pp.getPickerelPoints()+" Yellow Pickerel"

        ));

System.out.print("Number of ways to catch fish: " + possiblePoints.size());

 

 

전체 코드는 아래와 같습니다.

 

package com.bjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {
        final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        GivenPoints points = new GivenPoints();
        points.setTroutPoints(Integer.parseInt(br.readLine()));
        points.setPikePoints(Integer.parseInt(br.readLine()));
        points.setPickerelPoints(Integer.parseInt(br.readLine()));
        points.setTotalPoints(Integer.parseInt(br.readLine()));

        List<PossiblePoints> possiblePoints = findPossiblePoints(points);

        possiblePoints.forEach(pp-> System.out.println(
                pp.getTroutPoints() + " Brown Trout, "+ pp.getPikePoints() +" Northern Pike, "+pp.getPickerelPoints()+" Yellow Pickerel"

                ));

        System.out.print("Number of ways to catch fish: " + possiblePoints.size());
    }

    private static List<PossiblePoints> findPossiblePoints(GivenPoints points) {

        int maxTroutNum = points.getTotalPoints() / points.getTroutPoints();
        int maxPikeNum = points.getTotalPoints() / points.getPikePoints();
        int maxPickerel = points.getTotalPoints() / points.getPickerelPoints();
        List<PossiblePoints> possiblePoints = new ArrayList<>();

        for (int i = 0; i<= maxTroutNum; i++){
            for (int j = 0; j<= maxPikeNum; j++){
                for (int k = 0; k<= maxPickerel; k++){
                    int curPoint = i * points.getTroutPoints()
                            + j * points.getPikePoints()
                            + k * points.getPickerelPoints();
                    if(curPoint <= points.getTotalPoints() && curPoint != 0){
                        possiblePoints.add(new PossiblePoints(i,j,k));
                    }
                }
            }
        }

        return possiblePoints;
    }

    private static class PossiblePoints{
        int troutPoints;
        int pikePoints;
        int pickerelPoints;

        public PossiblePoints(int troutPoints, int pikePoints, int pickerelPoints) {
            this.troutPoints = troutPoints;
            this.pikePoints = pikePoints;
            this.pickerelPoints = pickerelPoints;
        }

        public int getTroutPoints() {
            return troutPoints;
        }
        public int getPikePoints() {
            return pikePoints;
        }
        public int getPickerelPoints() {
            return pickerelPoints;
        }
    }



    private static class GivenPoints {
        int troutPoints;
        int pikePoints;
        int pickerelPoints;
        int totalPoints;

        public int getTroutPoints() {
            return troutPoints;
        }

        public void setTroutPoints(int troutPoints) {
            this.troutPoints = troutPoints;
        }

        public int getPikePoints() {
            return pikePoints;
        }

        public void setPikePoints(int pikePoints) {
            this.pikePoints = pikePoints;
        }

        public int getPickerelPoints() {
            return pickerelPoints;
        }

        public void setPickerelPoints(int pickerelPoints) {
            this.pickerelPoints = pickerelPoints;
        }

        public int getTotalPoints() {
            return totalPoints;
        }

        public void setTotalPoints(int totalPoints) {
            this.totalPoints = totalPoints;
        }
    }

}

 

 

 

 

읽어주셔서 감사합니다

 

무엇인가 얻어가셨기를 바라며

 

오늘도 즐거운 코딩 하시길 바랍니다 ~ :)

 


 

728x90