본문 바로가기

카테고리 없음

TIL_2024_12_11

 

며칠 전 해결한 문제와 유사한 문제같습니다.

문자열에서 1의 갯수를 구하는 방법은 length()로 길이를 구한뒤 문자열에서 1을 ""으로 변환하고 난 후 길이를 구한뒤 차를 구하면됩니다.

class Solution {
    public int solution(int n) {
        String s = Integer.toBinaryString(n);
        //일단 n을 2진수로 변환
        int bef = s.length();
        
        s = s.replace("1","");
        
        int aft = s.length();
        
        int oneCount = bef-aft;
        
        return qwe(n,oneCount);
    }
    public int qwe(int n,int OneCount) {
        while(true) {
            n++;
            String s = Integer.toBinaryString(n);
            int bef = s.length();

            s = s.replace("1","");

            int aft = s.length();

            int Count = bef-aft;
            if(Count==OneCount) {
                return n;
            }
        }
    }
}

간단합니다.

 

최소공배수를 구하는 문제입니다 저는 최소공배수를 구할때 최소공약수를 사용하는지 몰랐는데 최소공약수는 예전에 문제를 푼적이 있어서 기억났는데 최소공배수는 기억이 안나 찾아보았습니다.

 

class Solution {
    public int solution(int[] arr) {
        int answer=lcm(arr[0],arr[1]);
        
        for (int i=2; i<arr.length; i++) {
            answer=lcm(answer,arr[i]);
        }
        return answer;
    }
    
    
    public int gcd(int a,int b) {
        if(b==0) {
            return a;
        }
        return gcd(b,a%b);
    }
    
    public int lcm(int a,int b) {
        return (a*b)/gcd(a,b);
    }
}

최소공배수는 각숫자의 곱에 최대공약수를 나눈 값이라고 합니다.

 

기네요.... 하지만 간단한 문제입니다.

하지만 0에서 시작해서 경우의 수를 세는건 너무 많죠 때문에 N을 0으로 만드는것을 목표로 생각하면 쉽습니다.

import java.util.*;

public class Solution {
    public int solution(int n) {
        int k=0;
        while(n>0) {
            if(n%2==0) {
                n=n/2;
            } else {
                n--;
                k++;
            }
            
        }
        return k;
    }
}

n이 0이 될때까지 2의 배수라면 2로 나누고 아니라면 1을 감소시키고 카운트를 증가시킵니다 그후 n이 0이되면 k를 리턴하면되는 지문의 길이에 비해 굉장히 쉬운 문제입니다.