TIL Java

내일배움캠프 37일차 TIL _ 8주 3일차

mad038 2024. 6. 5. 19:31

 

  • 오늘 있었던 일
    • 팀과제 및 공부
    • 알고리즘

SPRIONG

  • 스프링 정리

 

알고리즘 문제 풀기

 

     ● 예상 대진표

더보기

● 예상 대진표 //링크

class Solution
{
    public int solution(int n, int a, int b)
    {
        int answer = 0;

        
        while (true){
            answer++;
            if (a%2 == 1){
                a++;
            }
            if (b%2 == 1){
                b++;
            }


            a /=2;
            b /=2;

            if (a == b){
                break;
            }
        }

        return answer;
    }
}
  • 첫 시도때 태스트문도 통과했지만 후반 문제들이 시간 초과가 일어났다.
    • 문제 지문에
      • 번 끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4
    • 무조건 승리한다. 즉 각 값이 홀수가 될 수 있다면. 강재로 같은값이 나오게하면 된다.  
      • 승리시 짝수가 되는 경우가 있어서 실패함
      • 그냥 체크할때 마다 각 수의 위치를 조정해줌
  • 밑은 다른 사람의 풀이
  • class Solution
    {
        public int solution(int n, int a, int b)
        {
            return Integer.toBinaryString((a-1)^(b-1)).length();
        }
    }
  • ㅇ? 나보다 깔끔하다고?!
  • 다른 사람이 설명해준 내용
    • (a-1) XOR (b-1)값을 이진수 문자열로 변환한 길이를 세는 거니까. 예를들어 3과 7이면 11 XOR 111이고 값은 100이 되니까 문자열 길이가 바로 3라운드가 되겠네요. 재미있네요. 하나 배워갑니다. ㅎㅎ

 

     ● N개의 최소공배수

더보기

● N개의 최소공배수 //링크

import java.util.Arrays;
class Solution {
    public int solution(int[] arr) {
        Arrays.sort(arr);

        int lcm = arr[0];
        for (int i = 1; i < arr.length; i++) {
            lcm = lcm(lcm, arr[i]);
        }

        return lcm;
    }

    public static int gcd(int a, int b) {
        while (b != 0) {
            int temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }

    public static int lcm(int a, int b) {
        return (a * b) / gcd(a, b);
    }
}
  • 하나하나씩 전체 공약수를 구하고 최소공배수를 구한값에 로직을 반복한다.  
  • 밑은 다른 사람의 풀이
  • class NLCM {
        public long nlcm(int[] num) {
            long answer = 1;
            for (int i = 0; i < num.length; i++) {
                long g = gcd(num[i], answer);
                answer = num[i] * answer / g;
            }
            return answer;
        }
    
        // 최대공약수
        long gcd(long a, long b) {
            while (b != 0) {
                long temp = a % b;
                a = b;
                b = temp;
            }
            return a;
        }
  • 거의 비슷하게 했다.

 


당일 회고

  • 스프링 AOP는 또 뭐야아아 아ㅏ악