💡문제 풀이/백준 - JAVA

주사위 세개 / 2480

뇌 리셋은 기본이지 2023. 11. 9. 15:19

정보

분류 : 조건문

 

문제

문제링크

 

풀이

package backjun;

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int A = sc.nextInt();
		int B = sc.nextInt();
		int C = sc.nextInt();
		
		int result = 0;			// 결과 값
		
		// 모두 동일한 숫자일 때
		if(A == B && B == C && A == C) {
			
			result = 10000 + A * 1000;
			
		// 두 개의 숫자만 동일할 때
		} else if(A == B || A == C) {
			
			result = 1000 + A * 100;
			
		} else if(B == C) {
			
			result = 1000 + B * 100;
			
		// 모두 다른 숫자일 때
		} else {

			// A,B,C 중 최대 값을 구해 result 변수에 할당
			result = Math.max(Math.max(A, B), C) * 100;
            
		}
		
		System.out.println(result);
		
	}
}

 

풀이 후기

모두 같은 숫자면 &&(AND)를 이용하여 세 개의 조건을 모두 충족해야 그에 대한 연산을 진행하고, 세 개의 조건 중 하나라도 틀리면 거짓(false)를 뱉어 다른 else if 쪽으로 넘어가게 두었다. 두 개의 숫자만 동일할 경우 ||(OR)을 이용하여 A 변수 기준 두 개의 조건 중 하나라도 참(true)일 경우 참(true)을 뱉어 그에 대한 연산을 진행한다. 모든 숫자가 동일하지 않다면 A, B, C 중 Math.max라는 함수를 사용해서 최대값을 추출하여 그에 대한 연산을 진행했다.

오답노트

처음엔 패키지명을 그대로 넣어버려서 런타임 에러가 떴다.

 

그 뒤로는 모두 코드가 이상해서 오답으로 체점 되었다.

초반엔 두개의 숫자만 동일할 때 ||가 아닌 &&을 써버려서 원하는 값이 나와지 않았었다.

  • 첫번째 오답 부분
...
// 두개의 숫자만 동일할 때
//} else if(A == B && A == C) {		// 수정 전
} else if(A == B || A == C) {		// 수정 후

    result = 1000 + A * 100;

} else if(B == C) {
...

첫번째 오답 부분 확인하고 나니 예시처럼 올바르게 값이 출력되는 점을 확인할 수 있었다.

하지만 백준은 여전히 오답이라고 알려준다.

 

찾다 찾다 너무 답답해서 질문 페이지로 가서 뭐가 문젠지 확인해달라고 글을 올렸다. 

글 작성하자마자 답변해주신 천사같은 고수님이 계셨다!

그렇다.

초반부터 이상하게 코드를 짠 것이다...

  • 두번째 오답 부분
...
// 두개의 숫자만 동일할 때
} else if(A == B || A == C) {

    result = 1000 + A * 100;

} else if(B == C) {

    //result = 1000 + A * 100;		// 수정 전
    result = 1000 + B * 100;		// 수정 후
..

두번째 오류 부분을 확인하고 다시 채점했는데 또 다시 오답으로 나왔다.

 

뭔가 퍼센트(%)가 쭉쭉 올라가다가 85% 부터 안올라가서

최대값 구하는 부분이 문젠가 싶어 다른 블로그를 참고하였다.

 

일부 블로그에서 최대값을 Math.max 함수 사용하였기에

기존에 있던 코드를 지우고 Math.max 함수를 사용해보았다.

  • 세번째 오답 부분
...
// 모두 다른 숫자일 때
} else {

  int max = A;

  /*if(max < B) {
  	max = B;
  } else if(max < C) {
    max = C;
  }*/							// 수정 전

// A,B,C 중 최대 값을 구해 result 변수에 할당
result = Math.max(Math.max(A, B), C) * 100;		// 수정 후
...

Math.max로 바꿔 최대값을 구하니까 정답이라고 되었다.

뭐가 문제일까..ㅠㅠ 당최 알 수 없다..

reference

https://hellodoor.tistory.com/225

https://dhdl-it.tistory.com/12

'💡문제 풀이 > 백준 - JAVA' 카테고리의 다른 글

A+B - 3 / 10950  (0) 2023.11.13
구구단 / 2739  (0) 2023.11.13
오븐 시계 / 2525  (0) 2023.11.09
알람 시계 / 2884  (1) 2023.11.09
사분면 고르기 / 14681  (1) 2023.11.09