// 프로덕션코드
import java.util.Scanner;
public class lawOfLargeNumber {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int k = sc.nextInt();
String data = sc.nextLine();
}
}
// 왜 nextInt만 3개 받아지고 바로 종료가 될까?
// 일단 하나씩 받아서 해결부터 해보자!
import java.util.Arrays;
import java.util.Scanner;
public class lawOfLargeNumber2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int k = sc.nextInt();
int[] data = new int[n];
for (int i = 0; i < n; i++) {
data[i] = sc.nextInt();
}
Arrays.sort(data);
int theMostLargestNumber = data[n - 1];
int secondLargestNumber = data[n - 2];
int[] arr = new int[k + 1];
for (int i = 0; i < k; i++) {
arr[i] = theMostLargestNumber;
}
arr[k] = secondLargestNumber;
int cnt = 0;
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
cnt++;
if (cnt == m) {
break;
}
if (i == arr.length - 1) {
i = -1;
}
}
System.out.println(sum);
}
}
// 성공! 처음 보는 사람도 읽기 쉽도록 리팩토링해보자.
import java.util.Arrays;
import java.util.Scanner;
public class lawOfLargeNumber2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int k = sc.nextInt();
int[] data = new int[n];
for (int i = 0; i < n; i++) {
data[i] = sc.nextInt();
}
Arrays.sort(data);
int theMostLargestNumber = data[n - 1];
int secondLargestNumber = data[n - 2];
int[] oneCycleArray = new int[k + 1];
setOneCycleArray(k, theMostLargestNumber, secondLargestNumber, oneCycleArray);
int cnt = 0;
int sum = 0;
System.out.println(getSum(m, oneCycleArray, cnt, sum));
}
private static int getSum(int m, int[] oneCycleArray, int cnt, int sum) {
for (int i = 0; i < oneCycleArray.length; i++) {
sum += oneCycleArray[i];
cnt++;
if (cnt == m) {
break;
}
if (i == oneCycleArray.length - 1) {
i = -1;
}
}
return sum;
}
private static void setOneCycleArray(int k, int theMostLargestNumber, int secondLargestNumber, int[] oneCycleArray) {
for (int i = 0; i < k; i++) {
oneCycleArray[i] = theMostLargestNumber;
}
oneCycleArray[k] = secondLargestNumber;
}
}
// 성공! 아래는 함께 모범 답안을 첨부한다.
import java.util.Arrays;
import java.util.Scanner;
public class lawOfLargeNumberAnswer {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// N, M, K를 공백을 기준으로 구분하여 입력 받기
int n = sc.nextInt();
int m = sc.nextInt();
int k = sc.nextInt();
// N개의 수를 공백을 기준으로 구분하여 입력 받기
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
Arrays.sort(arr); // 입력 받은 수들 정렬하기
int first = arr[n - 1]; // 가장 큰 수
int second = arr[n - 2]; // 두 번째로 큰 수
// 가장 큰 수가 더해지는 횟수 계산
int cnt = (m / (k + 1)) * k;
cnt += m % (k + 1);
int result = 0;
result += cnt * first; // 가장 큰 수 더하기
result += (m - cnt) * second; // 두 번째로 큰 수 더하기
System.out.println(result);
}
}
첫번째 코드블록에서 왜 숫자 3개만 받아졌는지 알아냈다. (지연님 감사합니다!)
앞에 숫자를 받고 엔터를 쳐버리면 엔터가 입력값으로 받아진다.
이를 해결하기 위해서는
1. 중간에 scan.nextLine(); 삽입하기
2. nextLine()으로 받아서 parseInt로 변경해서 출력하기
3. 스캐너를 두 개 받기
그 중 1번이 가장 간단하다.
참고한 블로그를 아래에 첨부한다.
https://gongstudyit.tistory.com/m/18
'코딩테스트연습 > 이것이 취업을 위한 코딩테스트다' 카테고리의 다른 글
[이코테 - JAVA] 숫자 카드 게임 (0) | 2021.11.24 |
---|