코딩테스트/Programmers
[JAVA] 예상 대진표
hxx_1
2024. 4. 25. 16:38
< 내 풀이 >
class Solution
{
public int solution(int n, int a, int b)
{
int answer = 0;
double num1=(double)a;
double num2=(double)b;
while(a!=b){
num1=Math.ceil(num1/2);
num2=Math.ceil(num2/2);
a=(int)num1;
b=(int)num2;
answer++;
}
return answer;
}
}
✏️ 풀이 방법
a 와 b 가 같아질 때까지 반복문을 돈다.
=> Math.ceil(a/2) , Math.ceil(b/2) 를 반복한다.
: ⚠️ Math.ceil을 사용해서 원하는 값을 나오게 하기 위해서는 a와 b가 int형이 아닌 실수형이어야한다.
=> 같아질 때까지 이를 반복하는 횟수가 라운드 횟수이다.
< 다른 사람의 풀이 >
class Solution
{
public int solution(int n, int a, int b)
{
int round = 0;
while(a != b)
{
a = a/2 + a%2;
b = b/2 + b%2;
round++;
}
return round;
}
}
✍🏻 느낀점
처음에 헷갈렸던 부분은 뭔가 n을 쓸 일이 없는 것 같은데, n을 어디에 써야하지? 였다. 그리고 첫 풀이에서 나는 반복문이 돌아가는 조건을 while(Math.abs(a-b!=1)) 이런식으로 하고, 올림 함수가 아닌 반올림 함수를 사용해서 이상한 값이 나왔다. 나는 올림 함수를 써서 문제를 해결했는데, 위 풀이 방법으로 하는 것이 더 간단한 것 같다. 나머지는 나누는 수보다 항상 작으니 2로 나눈 나머지는 항상 0 또는 1이 나올것이고, 이것을 몫에 더해주면 결국 올림 함수를 사용해서 푼 내 방식과 똑같다. 이번에도 또 하나 배웠다 !