다희의 코딩 성장일기
[프로그래머스] level2. 예상 대진표 (자바 JAVA) 본문
[ 문제 ] [프로그래머스] level2. 예상 대진표 (자바 JAVA)
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12985
# 접근 방법 및 풀이
- 토너먼트 대진표가 떠올랐다. 그래서 while문 이용해서 문제 그대로 짰는데, 다른 사람 풀이 보니까 훨씬 더 짧게 짤 수 있어서 다시 변경했다.
- 예제에서 라운드에 올라갈 때 마다 참가자의 순서가 바뀌게 된다. 그리고 A와 B는 항상 이긴다고 가정했으므로, A와 B가 다음 라운드로 갈 경우 순서만 고려해서 풀어주면 된다.
- 예제 처럼, N = 8, A = 4, B = 7이라고 가정할 때 처음 대진표는 다음과 같다.
-
1 2 3 4 5 6 7 8 - 여기서 우린 4번째 참가자와 8번째 참가자가 다음 라운드로 올라갈때 순서가 어떻게 바뀌는지만 보면 된다.
- 그러기 전에, 어떤 참가자가 다음 라운드시 어떤 순서를 갖게 될지 공식을 짜서 구할 수 있다.
-
1 2 3 4 5 6 7 8 -
1 2 3 4 - 토너먼트 이므로 두팀씩 대결해 다음 라운드로 진출해 올라가는 팀은 절반으로 줄어들고 순서도 바뀐다.
- 1,2번 참가자 -> 1번, / 3,4번 참가자 -> 2번 / 5,6번 참가자 -> 3번 / 7,8번 참가자 -> 4번
- 순서를 구하는 규칙은 예를들어, 현재 2번인 참가자일 경우 2 / 2 + 2 % 2인 1이된다. 몫과 나머지를 구해 더한 값이다.
- 이를 토대로 4번과 7번 참가자의 대진표를 뽑으면 다음과 같다.
-
1 2 3 4 5 6 7 8 -
1 2 3 4 -
1 2 -
1 - 4번과 7번의 순서가 같아질 때 종료하면 된다.
- 자세한건 코드참조
# 주의할 점
- 딱히 없음
JAVA 코드
import java.util.*;
class Solution
{
public 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;
}
}
REVIEW
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] level1. 없는 숫자 더하기 (자바 JAVA) (0) | 2021.09.21 |
---|---|
[프로그래머스] level1. 위클리 챌린지 6주차_복서 정렬하기 (자바 JAVA) (0) | 2021.09.14 |
[프로그래머스] level2. 더 맵게 (자바 JAVA) (0) | 2021.09.02 |
[프로그래머스] level2. 주식가격 (자바 JAVA) (0) | 2021.09.02 |
[프로그래머스] level2. 쿼드압축 후 개수 세기 (자바 JAVA) (0) | 2021.09.01 |
Comments