본문 바로가기
PS/BOJ

[자바] 백준 21312 - 홀짝 칵테일 (java)

by Nahwasa 2022. 8. 17.

 문제 : boj21312


 

필요 알고리즘 개념

  •  짝수, 홀수 판정
    • 짝수와 홀수 판정하는 방법을 알아야 한다.

※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.

 


 

풀이

  문제에서 제시된 조건을 고유 번호의 곱에 해당하는 '맛'을 기준으로 다시 살펴보자. 임의의 맛 X와 맛 Y가 있다고 해보자.

1. X가 홀수이고, Y가 짝수라면 무조건 X가 더 맛있다.

2. X가 짝수이고, Y가 홀수라면 무조건 Y가 더 맛있다.

3. X가 홀수이고, Y가 홀수라면 둘 중 큰 수가 더 맛있다.

4. X가 짝수이고, Y가 짝수라면 둘 중 큰 수가 더 맛있다.

 

 

  조건은 위와 같으니, 이제 필요한건 고유번호 A,B,C를 통해 만들 수 있는 모든 '맛'의 경우의 수 이다. 모든 경우는 다음과 같다.

1. A

2. B

3. C

4. A*B

5. B*C

6. A*C

7. A*B*C

 

 

  위의 경우들 중 조건에 따라 가장 맛있다고 느끼는 맛을 출력해주면 된다. 내 경우엔 answer이라는 변수를 하나 두고, 언제나 가장 낮은 맛이 되는 0을 초기값으로 뒀다. 그리고 7가지 경우를 answer과 비교하면서 answer을 7가지 중 가장 맛있는 값으로 변경하는 방식으로 짰다.

 


 

코드 : github

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    int answer = 0;

    private void setAnswer(int cur) {
        if (answer%2==1 && cur%2==0) {
            return;
        }
        if (answer%2==0 && cur%2==1) {
            answer = cur;
            return;
        }
        if (answer < cur)
            answer = cur;
    }

    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] arr = new int[3];
        StringTokenizer st = new StringTokenizer(br.readLine());
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());

        setAnswer(a);
        setAnswer(b);
        setAnswer(c);
        setAnswer(a*b);
        setAnswer(b*c);
        setAnswer(a*c);
        setAnswer(a*b*c);

        System.out.println(answer);
    }

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글