* 순서
- 문제
- 문제 설명
- 문제 목표
- 문제 풀이
- 최종 코드
- 포인트
- 다른 사람 코드
- 문제
- 문제 설명
토너먼트 문제이다. 2명씩 짝을 지어 경기를 하며 참가자 번호가 계속 바뀐다.
선수 A, B는 계속 이긴다.
- 문제 목표
선수 A, B가 서로 경기할 때의 라운드를 구하면 된다.
- 문제 풀이
1. 1라운드부터 시작하지만 0라운드라고 했을 경우 +1씩 라운드가 같아질 때까지 구하면 된다.
2. 선수번호가 계속 바뀌므로 함수를 이용한다.
3. 짝수일 경우, 몫이 선수 번호가 된다.
4. 홀수일 경우, (몫 + 1) 이 선수 번호가 된다.
- 최종 코드
public static int solution(int n, int a, int b)
{
int answer = 0;
//1. 1라운드부터 시작하지만 0라운드라고 했을 경우 +1씩 라운드가 같아질 때까지 구하면 된다.
while(a != b) {
//2. 선수 번호가 계속 바뀌므로 함수를 이용한다.
a = numberParticipant(a);
b = numberParticipant(b);
answer++;
}
return answer;
}
private static int numberParticipant(int x) {
//3. 짝수일 경우, 몫이 선수 번호가 된다.
if(x % 2 == 0) {
x = x / 2;
}//4. 홀수일 경우, (몫 + 1) 이 선수 번호가 된다.
else {
x = x / 2 + 1;
}
return x;
}
- 포인트
주어진 값(선수 번호)아 짝수, 홀수일 때의 관계를 이용한다.
- 다른 사람 코드
나누기에서의 몫과 나머지의 합이 다음 선수 번호가 된다는 관계식을 이용하였다.
public static int solution(int n, int a, int b)
{
int answer = 0;
while(true) {
a = a / 2 + a % 2;
b = b / 2 + b % 2;
answer++;
if(a == b) {
break;
}
}
return answer;
}
'Algorithm' 카테고리의 다른 글
[프로그래머스 Java] 할인 행사 Lv.2 (0) | 2023.09.19 |
---|---|
[프로그래머스 Java] 올바른 괄호 Lv.2 (0) | 2023.09.12 |
[프로그래머스 Java] 최소값 만들기 Lv.2 (0) | 2023.09.11 |
[프로그래머스 Java] JadenCase 문자열 만들기 Lv.2 (0) | 2023.09.05 |
[프로그래머스 Java] 추억 점수 Lv.1 (0) | 2023.09.05 |
댓글