https://programmers.co.kr/learn/courses/30/lessons/12985?language=java
코딩테스트 연습 - 예상 대진표
△△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N�
programmers.co.kr
<내 풀이>
라운드가 하나씩 올라갈때마다 n도 1/2씩 줄어듭니다. 그래서 n=2일때 까지 반복해서 연산을 합니다. 처음에 a,b 중 어떤 수가 작은 수인지 모르기 때문에 일단, 그 처리를 먼저 해줍니다. 그런다음에 시합을 하기 위해서는 작은 수가 홀수이고, 그 수에 1을 더한 값이 b여야합니다. 그래서 이조건을 만족시키는 answer를 return합니다. 이 조건을 만족시키지 못하면 2로 나누어진 수를 올림해서 구해줍니다.
package algorithm_2;
public class l12 {
public static int solution(int n, int a, int b)
{
int answer = 1;
int temp =0;
if(a>b) {
temp=a;
a=b;
b=temp;
}
while(n!=1) {
if((a%2!=0)&&(a+1==b)) {
return answer;
}else {
a=(int) Math.ceil((double)a/2);
b=(int) Math.ceil((double)b/2);
n/=2;
answer++;
}
}
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println("Hello Java");
return answer;
}
public static void main(String[] args) {
int n = 8;
int a = 4;
int b = 7;
System.out.println(solution(n, a, b));
}
}
<남풀이>
나는 반복횟수를 n을 활용해서 했는데, 아얘 a=b가 같아 지기 전까지 연산을 하는 것으로 반복문을 짰다. 좋은 생각 인 것 같습니다.
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;
}
}
'컴퓨터 프로그래밍 > 알고리즘' 카테고리의 다른 글
프로그래머스-구명보트 (0) | 2020.06.09 |
---|---|
프로그래머스-쇠막대기 (0) | 2020.06.06 |
프로그래머스-기능개발 (0) | 2020.06.04 |
프로그래머스-폰켓몬 (0) | 2020.06.04 |
프로그래머스-점프와 순간 이동 (0) | 2020.06.04 |