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는 또 뭐야아아 아ㅏ악