[BaekJoon] 2480번 - 주사위 세개 (java)

1. 문제

👉 문제 바로가기

- 조건

시간 제한 메모리 제한
1초 128MB


- 문제

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
      1. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
      2. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
      3. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.

예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.
3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.



- 입력

첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.

- 출력

첫째 줄에 게임의 상금을 출력 한다.

- 예제

  입력      출력  
3 3 6 1300
2 2 2 12000
6 2 5 600





2. 풀이

3개의 눈에 따라 상금이 달라지기 때문에 조건문 if를 사용한다.



2가지 입력방법을 사용해서 결과를 출력한다.

  1. Scanner 클래스
  2. BufferedReader 클래스
      ① StringTokenizer 클래스
      ② split() 메서드



- 1. Scanner 클래스 사용

import java.util.Scanner;

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();
        
        if(A==B && A==C && B==C) System.out.println(10000+A*1000); //3개의 눈이 같은 경우
        else if(A==B || A==C) System.out.println(1000+A*100); //2개의 눈이 같은 경우
        else if(B==C) System.out.println(1000+B*100); //2개의 눈이 같은 경우
        else System.out.println(Math.max(A,Math.max(B,C))*100); //3개의 눈이 모두 다른 경우
    }
}

위와같이 객체를 생성할 때, Scanner(System.in) 에서 System.in 은 입력한 값을 Byte 단위로 읽는 것을 뜻한다.

int형 데이터를 입력받기 위해 nextInt() 메서드를 사용한다.

3개의 서로 다른 눈 중에서 최댓값을 찾아내기 위해 Math.max() 함수를 사용한다.
Math.max(a,b) 는 두 인자 값 중 큰 값을 리턴하는 함수이다.



[여기서 잠깐!]

Math.max(a,b) 와   Math.min(a,b)

Mathjava.lang 패키지에 포함된 클래스이며, 수학과 관련된 일련의 작업들을 처리할 수 있는 클래스다.
Math 클래스의 다양한 메소드들은 전부 static으로 구현되어있으므로, 따로 객체를 생성하지않고 사용가능하다.

• Math.max(a,b) : 두 인자 값 중 큰 값을 리턴하는 함수이다.
• Math.min(a,b) : 두 인자 값 중 작은 값을 리턴하는 함수이다.


Scanner에 대해 더 자세히 알고싶다면 여기 를 클릭하세요





- 2. BufferedReader 클래스 사용

BufferedReader는 readLine() 메서드를 사용해 한 행을 전부 읽는다.
이를 공백단위로 분리해야 하는데, 두가지 분리 방법으로 문제를 풀어보자.



     ① StringTokenizer 클래스를 사용하여 분리해주는 방법
     ② split() 을 사용하는 방법



① StringTokenizer 클래스를 이용

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

public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        int A = Integer.parseInt(st.nextToken()); 
        int B = Integer.parseInt(st.nextToken()); 
        int C = Integer.parseInt(st.nextToken()); 
       
        if(A==B && A==C && B==C) System.out.println(10000+A*1000); //3개의 눈이 같은 경우
        else if(A==B || A==C) System.out.println(1000+A*100); //2개의 눈이 같은 경우
        else if(B==C) System.out.println(1000+B*100); //2개의 눈이 같은 경우
        else System.out.println(Math.max(A,Math.max(B,C))*100); //3개의 눈이 모두 다른 경우
    }
}

readLine()은 한 줄을 통째로 읽어 String으로 반환하기 때문에, StringTokenizer 클래스의 nextToken()를 이용해 공백으로 구분된 입력값들을 순서대로 가져온다.

Integer.parseInt()을 사용해 String형을 int형으로 변환시켜준다.



[여기서 잠깐!]

BufferedReader 클래스에 대해 더 알아보고 싶으면 여기를 클릭하면 된다.





② split() 을 사용

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

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

        int A = Integer.parseInt(arr[0]);
        int B = Integer.parseInt(arr[1]); 
        int C = Integer.parseInt(arr[2]); 
       
        if(A==B && A==C && B==C) System.out.println(10000+A*1000); //3개의 눈이 같은 경우
        else if(A==B || A==C) System.out.println(1000+A*100); //2개의 눈이 같은 경우
        else if(B==C) System.out.println(1000+B*100); //2개의 눈이 같은 경우
        else System.out.println(Math.max(A,Math.max(B,C))*100); //3개의 눈이 모두 다른 경우
    }
}

readLine()을 통해 한 줄로 받은 String 데이터를 split(" ") 메서드를 사용해 공백 단위로 나눈 뒤 배열에 저장한다.





3. Scanner VS BufferedReader 성능 비교

image

입력의 경우 확실히 Scanner 보다는 BufferedReader 가 빠른 것을 볼 수 있다.





관련 페이지





Categories:

Updated:

Leave a comment