-
[백준/BOJ] 1233번 : 주사위 (JAVA / 자바)백준 2022. 2. 15. 18:45
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/1233
- 문제 -
난이도 브론즈 2 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
세 주사위는 1부터 해당 값까지의 값들을 가진다. (세 입력값을 S1, S2, S3이라하겠다)
세 주사위의 모든 변이 나올 수 있는 가짓수는 S1 + S2 + S3 - 2이다. 1 1 1로 계산해봐도 가능한건 111한가지이고, 세 수의 하븐 3이다. 그렇다면 3 - 2인 값이 가짓수가 되는 것이다.
우선 배열을 만든다. 배열의 역활은 세 주사위의 각 눈끼리의 합이 나올때마다 배열에 각 자리에 나온 횟수를 저장해주는 역활이다. 예를 들면 3 2 3이면 우선 1 + 1+ 1이 나올 수있다. 그렇다면 세수의 합은 3. 배열의 0인덱스에 +1을 해준다. 1 + 1 + 2 가 나올 수도 있다. 그렇다면 세수의 합은 4. 배열의 1인덱스의 +1을 해준다. 이 두가지만 봐도 활용방법을 알 수 있을 것이다. 나온 합에 -3을 한 값의 인덱스에 +1을 해주는 것이다.
그리고 주사위의 개수가 3개이니 3개의 for문을 만들어준다. 각 주사위의 눈의 개수만큼 반복하게 해주고, 나올수 있는 눈의 값들을 더해주고 그 합의 -3인덱스에 +1을 해준다.
반복문이 끝나면 각 인덱스에 수들이 들어가 있을 것이다.
그렇다면 그 배열의 최댓값을 구해준다. 여러개여도 먼저 나온 최댓값만 저장 될 것이니 그건 거정할 필요가 없다.
최댓값을 구하면서 배열[인덱스] 값만 저장 해 줄게 아니라, 인덱스 값 자체도 저장해 줘야한다. 왜냐면 인덱스 값 + 3이 최대 개수인 눈의 합이기 때문이다.
코드로 보자.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; 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 S1 = Integer.parseInt(st.nextToken()); int S2 = Integer.parseInt(st.nextToken()); int S3 = Integer.parseInt(st.nextToken()); //주사위 눈의 합의 개수를 저장 할 배열 int[] arr= new int[(S1 + S2 + S3) - 2]; //개수를 저장하기 위한 반복문 for(int i = 1; i <= S1; i++) { for(int j = 1; j <= S2; j++) { for(int k = 1; k <= S3; k++) { int sum = i + j + k; arr[sum - 3]++; } } } int max = 0; int result = 0; //최댓값이 갱신 될때마다 max에 인덱스에 저장된 값과 result에 인덱스 값 + 3을 저장. for(int i = 0; i < arr.length; i++) { if(max < arr[i]) { max = arr[i]; result = i + 3; } } System.out.println(result); } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 1259번 : 팬린드롬수 (JAVA / 자바) (0) 2022.02.15 [백준/BOJ] 1252번 : 이진수 덧셈 (JAVA / 자바) (0) 2022.02.15 [백준/BOJ] 1225번 : 이상한 곱셈 (JAVA / 자바) (0) 2022.02.15 [백준/BOJ] 10952번 : A+B - 5 (JAVA / 자바) (0) 2022.02.15 [백준/BOJ] 10951번 : A+B - 4 (JAVA / 자바) (0) 2022.02.15