며칠 전 해결한 문제와 유사한 문제같습니다.
문자열에서 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를 리턴하면되는 지문의 길이에 비해 굉장히 쉬운 문제입니다.