1. 몫 구하기
public class _01_getQuotient {
public static void main(String[] args) {
_01_getQuotient get = new _01_getQuotient();
System.out.println(get.getQuotient());
}
private int getQuotient() {
Scanner sc = new Scanner(System.in);
int firstNumber = sc.nextInt(); // 나눠지는 숫자
int secondNumber = sc.nextInt(); // 나눌 숫자
int quotient = firstNumber/secondNumber; // 타입이 int이므로 소수점을 버려진다.
return quotient;
}
}
큰 어려움 없이 해냈다.
2. 최빈값 구하기
public class _02_getMode {
public static void main(String[] args) {
_02_getMode getMode = new _02_getMode();
int[] ints = {1,2,1,3,1,4,1,2,3,1};
for (String count : getMode.getMode(ints)) {
System.out.println(count);
}
}
private String[] getMode(int[] ints) {
int index = 0;
String[] countArray = new String[ints.length];
for (int getInt : ints){
int count = 0;
for (int i = 0; i < ints.length; i++) {
if (getInt == ints[i]) {
count++;
}
}
countArray[index] = getInt + " + " + count;
index++;
}
return countArray;
}
}
처음에는 위와 같이 배열에서 각 숫자를 가져와 배열의 다른숫자들과 비교해 같으면 카운트를 1씩 추가해 어떤 숫자의 카운트가 제일 큰 지 비교하려 했으나 로직도 더러워지고 무엇보다 같은 숫자를 여러번 카운트해 깔끔하게 출력되지 않았다.
그래서 일단 배열안에 어떤 숫자들이 있는지부터 확인하고, 각 숫자가 몇 개 있는지 확인하는 방식으로 진행하려 한다.
public class _02_getMode {
public static void main(String[] args) {
int[] ints = {1,2,1,3,1,4,1,2,3,1};
getMode(ints);
}
// 최빈값 구하는 메서드
private static void getMode(int[] ints) {
ArrayList<Integer> countInts = new ArrayList<>();
for (int i = 0; i < checkInts(ints).size(); i++) {
int count = 0;
for (int j = 0; j < ints.length; j++) {
// 확인된 숫자와 리스트 안에 숫자가 같으면 카운트 추가
if (checkInts(ints).get(i).equals(ints[j])) {
count++;
}
}
countInts.add(count);
}
// 카운트가 가장 큰 값의 숫자 확인하기 = 최빈값의 카운트
int maxCount = 0;
for (int i = 0; i < countInts.size(); i++) {
if (countInts.get(i) > maxCount) {
maxCount = countInts.get(i);
}
}
System.out.println(checkInts(ints).get(countInts.indexOf(maxCount)) + " : " + maxCount + "회");
}
// 확인된 숫자 리스트 만들기
private static ArrayList<Integer> checkInts(int[] ints) {
ArrayList<Integer> checkedInts = new ArrayList<>();
// 각각의 원소가 확인된 숫자 리스트에 없으면 추가
for (int check : ints) {
if (!checkedInts.contains(check)) {
checkedInts.add(check);
}
}
return checkedInts;
}
}
위와 같이 작성할경우 시간복잡도가 너무 커져 ArrayList가 아닌 Map으로 생성하는 것이 더 좋을 듯 하다는 조언을 받았다.