-
[프로그래머스] 예상 대진표 -Java알고리즘 문제 풀이 2024. 5. 2. 22:48
문제 - 예상 대진표
https://school.programmers.co.kr/learn/courses/30/lessons/12985
문제 설명
제한사항
입출력 예
N A B answer 8 4 7 3
접근 방법
- 이 문제는 어떠한 자료구조를 이용해서 푸는 문제가 아니라 그냥 연산 만으로 풀 수 있는 문제라고 생각한다
- 하지만 규칙을 잘 봐야하는데
입출력 예 에서 N이 8 이다
그럼 (1, 2) (3, 4) (5, 6) (7, 8) 이렇게 붙게 되고 그 다음으로 넘어가게 된다근데 여기서 1, 2 번 중에 어떠한 한명이 이기더라도 1번으로 배정을 받는다
즉, 1, 2 -> 그다음 1이고 3, 4 -> 2 그리고 5, 6 -> 3 ..... 이렇게 배정을 받는 것이다
따라서 그 다음 순서는 (1, 2) (3, 4) 이렇게 되는 것이다
규칙을 보면 식을 세워 봤을때 n / 2 + n % 2 이런 식으로 되는것이다
A,B는 무조건 이긴 다고 가정을 하고 A,B 가 몇 번째 라운드에서 만나는지 구하라는 문제 이므로
while 문 반복문으로 A와 B 가 같을때 까지로 해서 저 공식에 넣어서 풀면 될 것 같다
코드 작성
class Solution { public int solution(int n, int a, int b) { int answer = 0; while(a != b) { a= a / 2 + a % 2; b= b / 2 + b % 2; answer++; } return answer; } }
풀고 느낀점
- 이 문제가 왜 2레벨인지 잘 모르겠다
- 2레벨 중 에서 쉬운편이라고 생각한다
- 이러한 문제는 규칙을 잘 보고 공식을 세워서 풀면 되는 문제이다
- 그래도 오랜만에 수학적인 문제가 나와서 반갑고 재밌었다
'알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] 같은 숫자는 싫어 - Java (0) 2024.05.06 [백준] 9372 상근이의 여행 - Java (0) 2024.05.03 [백준] 1991 트리 순회 - Java (1) 2024.05.01 [백준] 11279 최대 힙 - Java (0) 2024.04.30 [프로그래머스] 구명보트 - Java (0) 2024.04.29