본문 바로가기
Algorithm/Programmers

[프로그래머스(programmers)] (2017 팁스타운) 예상 대진표

by 광진구뚝배기 2021. 6. 1.

알고리즘 문제 풀이 / 프로그래머스 (programmers)  - 예상 대진표

 

 

 

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/12985#

 

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

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

programmers.co.kr

 

 

문제 풀이

 

다음라운드 자신의 대진번호는 (현재라운드 + 1) / 2 이다.

 

처음 풀어보았을 땐, b를 무조건 큰 수로 만든 후 b-a 의 차이로 구했다.이렇게 할 경우 테스트 케이스 7번, 33번 에서 실패였다. 바로 a = 4, b = 5일 경우에서의 오류였다.4, 5는 차이가 1이고, a가 짝수이기 때문에 내 코드로 풀게되면 정답은 2가 나온다. 하지만 정답은 3이다.그래서 다시 생각해보니 애초에 b-a 를 생각하지않고 b와 a의 값이 같으면 둘이 경기하는 것이기 때문에 모든 조건을 지우면 해결됐다.

이번 점수는 11점 이었다.

 

 

첫 번째 풀이( 7, 33 실패)

public int solution(int n, int a, int b) {
	int answer = 1;
    if(a > b) {
	    int temp = a;
    	a = b;
    	b = temp;
    }

    while(b - a != 1) {
		a = ++a / 2;
		b = ++b / 2;
        answer++;
    }
        
    answer = a % 2 == 1 ? answer : answer + 1;
    return answer;
    }
}

 

두 번째 풀이(정답)

 

public static int solution(int n, int a, int b) {
	int answer = 0;

	while(b != a) {
		a = ++a / 2;
		b = ++b / 2;
		answer++;
	}

	return answer;
}
반응형

댓글