-
[백준/BOJ] 15903번 : 카드 합체 놀이 (JAVA / 자바)백준 2022. 2. 25. 22:01
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/15903
- 문제 -
난이도 브론즈 3 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
카드의 개수 n개, 카드 합체 횟수 m번.
값이 적힌 카드가 n개있다. 이 중 작은 두 값을 구해서 더한 뒤 두 값에 더한 값을 저장한다. 이 행동을 m번 한다.
예를 들면 카드의 개수가 3개있고, 합체 횟수가 2번일때.
카드에 적힌 값은 1 5 3이다. 이 중 작은 값 두개는 1과 3이고, 두 값을 합쳐서 그 자리에 저장한다. 1 + 3은 4이고, 4를 저장하면 4 5 4다. 이렇게 한번한 것이고, 2번해야하기때문에 한번 더 반복한다.
4 5 4에서 작은 값 두개는 4와 4다. 4 + 4는 8이고, 저장하면 8 5 8이 된다. 이렇게 두번의 카드 합체가 끝났으니, 카드에 적힌 값들을 합해서 출력해준다. 8 5 8은 8 + 5 + 8 = 21이다. 출력 값은 21이 된다.
배열에 카드에 적힌 값들을 저장해준다.
m번 반복하는 반복문을 만들어준다. 반복할때마다 배열을 정렬해준다. 정렬을 하면 제일 작은 값 2개가 0과 1인덱스에 저장 될 것이다. 0인덱스 값과 1인덱스 값을 더해주고, 그 자리에 저장해준다.
반복이 끝나면 배열에 저장되어있는 값들을 다 합하고, 출력한다.
어렵진 않으나 틀린다면 보통 정수형의 범위를 틀리는 경우일 것이다.
1000개의 수가 있고, 1000*15인 15000번 반복하며, 값은 1000000까지 올 수있다. 얼추 봐도 int형을 넘어간다. 그러니 long형을 보자.
코드를 보자.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; 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 n = Integer.parseInt(st.nextToken()); int m = Integer.parseInt(st.nextToken()); long[] arr = new long[n]; st = new StringTokenizer(br.readLine()); for(int i = 0; i < n; i++) { arr[i] = Integer.parseInt(st.nextToken()); } for(int i = 0; i < m; i++) { //정렬 Arrays.sort(arr); //정렬 후 최솟값 2개는 0과 1인덱스에 저장된 값 long N = arr[0] + arr[1]; arr[0] = N; arr[1] = N; } long sum = 0; for(int i = 0; i < n; i++) { sum += arr[i]; } System.out.println(sum); } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 9095번 : 1, 2, 3 더하기 (JAVA / 자바) (0) 2022.02.26 [백준/BOJ] 11399번 : ATM (JAVA / 자바) (0) 2022.02.25 [백준/BOJ] 2751번 : 수 정렬하기 2 (JAVA / 자바) (0) 2022.02.25 [백준/BOJ] 15552번 : 빠른 A+B (JAVA / 자바) (0) 2022.02.25 [백준/BOJ] 2577번 : 숫자의 개수 (JAVA / 자바) (0) 2022.02.25