다희의 코딩 성장일기

[프로그래머스] level2. 예상 대진표 (자바 JAVA) 본문

Algorithm/프로그래머스

[프로그래머스] level2. 예상 대진표 (자바 JAVA)

ilmiodiario 2021. 9. 2. 16:54

[ 문제 ]  [프로그래머스] level2. 예상 대진표 (자바 JAVA)

 

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12985

 

코딩테스트 연습 - 예상 대진표

△△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N

programmers.co.kr

 


# 접근 방법 및 풀이 

 

  • 토너먼트 대진표가 떠올랐다. 그래서 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

Comments