본문 바로가기

Java & Intellij

231122 TIL 어제, 오늘의 알고리즘 풀이

1. 콜라츠 추측

class Solution {
    public int solution(int num) {
        int answer = 0;
        int count = 0; // answer와 동일한 기능을 하지만 조건 넣을 때 구분하기 위해 count 변수 선언

        while (num != 1) {
            if (num % 2 == 0) {
               num = num / 2; 
            } else {
               num = (num * 3) + 1;
            }
            answer++;
            count++;

            if (count == 500) {
                return -1; // count가 500번을 초과하면 더 이상 계산하지 않고 -1 리턴
            }
            if (num < 1) {
                return -1; // int형 Overflow 때문에 음수가 되는 경우 무조건 -1 리턴하도록 조건 생성함
            }
        }
        return answer;
    }
}

2. 하샤드 수

class Solution {
    public boolean solution(int x) {
        int result = 0;
    
        String s = Integer.toString(x); // int x를 string 형태로 변환
        for(int i = 0; i < s.length(); i++) {
            result += Integer.parseInt(s.substring(i, i + 1)); // string 형태로 변환하여 자릿수의 합 구하기
        }  
        if (x >= 1 && x < 10000 && x % result == 0) { // 하샤드 수 조건 설정
            return true;
        } else {
            return false;
        }
    }
}

3. 수박수박수박수박수...

class Solution {
    public String solution(int n) {
        String answer = "";
        String pattern = "수박"; // 수박 단어 자체를 패턴으로 지정하기

        for (int i = 0; i < n / 2; i++) {
            answer += pattern;
            }

        if (n % 2 == 1) {
            return answer += "수"; // 홀수인 경우에만 "수" 하나 더 추가해서 리턴하기
        }

            return answer;
    }
}

4. 제일 작은 수 제거하기

class Solution {
    public int[] solution(int[] arr) {
        
        // 빈 배열인 경우 배열에 -1을 채워 리턴
        if(arr.length == 1) {
            int[] answer = {-1};
            return answer;
        }
        
        // 가장 작은 수를 제거한 배열 리턴
        int[] answer = new int[arr.length-1];
        
        int min = arr[0];

        for(int i = 0; i < arr.length; i++) {
            min = Math.min(min, arr[i]); // 가장 작은 수 구하기
        }
        
        // 반복문 index
        int index = 0;
        
        // 가장 작은 수를 제외한 배열 만들기
        for(int i = 0; i < arr.length; i++) {
            if(arr[i] == min) {
                continue;
            }
            answer[index++] = arr[i];
        }
        
        return answer;
    }
}

5. 모의고사 완전탐색

import java.util.ArrayList;

class Solution {
    public int[] solution(int[] answers) {
        int[] a = {1, 2, 3, 4, 5};
        int[] b = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] c = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        
        int[] count = new int[3];
        
        for (int i = 0; i < answers.length; i++) { 
            if (answers[i] == a[i % a.length]) {
                count[0]++;
            }
            if (answers[i] == b[i % b.length]) {
                count[1]++;
            }
            if (answers[i] == c[i % c.length]) {
                count[2]++;
            }
        }
        
        // 최다 정답자 찾기
        int maxCount = Math.max(count[0], Math.max(count[1], count[2]));
        
        // 최다 정답자 리스트
        ArrayList<Integer> resultList = new ArrayList<>();
        for (int i = 0; i < count.length; i++) {
            if (count[i] == maxCount) {
                resultList.add(i + 1); // 배열 인덱스는 0부터 시작하므로 +1
            }
        }
        
        // 리스트 -> 배열
        int[] resultArray = new int[resultList.size()];
        for (int i = 0; i < resultList.size(); i++) {
            resultArray[i] = resultList.get(i);
        }
        return resultArray;
    }
}

 

최다 정답자를 리스트화 하고 다시 배열로 변경하는 과정을

안 보고 작성해보기로 하였음(팀원들과의 약속!)

 

 

* 함수로 쉽게 표현할 수 있는 부분들 정리해두면 좋을 것 같은데 엄두가 잘 안 난다...!

'Java & Intellij' 카테고리의 다른 글

팀 프로젝트 KPT 회고록: 직관 메이트 만들기  (2) 2023.11.27
231123 TIL  (1) 2023.11.23
231121 TIL: Spring 입문 1주차 강의 재수강  (0) 2023.11.21
231115 TIL  (0) 2023.11.15
231113 TIL  (0) 2023.11.13