[프로그래머스][Java] Lv.2 예상 대진표

2023. 6. 12. 23:45·Algorithms(CT)

문제 설명

N명이 참가한 대회는 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 

그리고 1vs2, 3vs4, ..., N-1 vs N 의 참가자가 게임을 진행하고, 각 게임에서 이긴 사람은 다음 라운드에서도 같은 방식으로 경기를 진행합니다.

게임 참가자 수 N, 참가자 번호 A, 참가자 번호 B가 함수 solution에 매개변수로 주어질 때,

처음 라운드에서 A번을 가진 참가자는 B번 참가자와 몇 번째 라운드에서 만나는지 return 하는 solution 함수를 완성하세요

 


풀이 과정

  1. 매개변수 a와 b를 무조건 a<b로 만들어 줍니다. (나중에 연산자 사용을 줄이기 위해)
  2. 경기하는 사람을 모두 LinkedList에 넣고 while문으로 경기를 진행합니다.
  3. 라운드 당 경기수는 (남아있는 사람 수/2)로 for문을 사용해 경기를 진행합니다.
  4. 경기에서 a와 b가 출전하게 되는 경우에는 무조건 그 선수가 이기도록 하고, 
    a,b가 아닌 선수는 뒤의 선수가 이기게 하여 다음 라운드에 넣습니다.
  5. a와 b가 대결할 때까지 3-4번 과정을 반복합니다.
  6. 경기를 진행하다가, 붙는 두 사람이 a와 b이면 반복문을 종료하고 answer(라운드 수)를 반환합니다.

전체 코드

import java.util.LinkedList;
class Solution
{
    public int solution(int n, int a, int b)
    {
        int answer = 0;
        
        //무조건 a<b로 만든다.
        if(a>b){
            int temp=a;
            a=b;
            b=temp;
        }
		//경기하는 사람들 모두 LinkedList에 넣음.
        LinkedList<Integer> q = new LinkedList<>();
        for(int i=1;i<=n;i++)
            q.add(i);
        
        int vs1,vs2;
        vs1=vs2=-1;//초기화.
        while(!q.isEmpty()){
            answer++; //한 사람의 대결 수 
            
            //해당 경기는 q에 남아있는 사람 수/2만큼 한다.
            int times=q.size()/2; 
            for(int i=0;i<times;i++){
                vs1=q.poll();
                vs2=q.poll();
                
                if(vs1==a && vs2==b){ //a,b가 붙게 되면 종료
                    break;
                }
                
                //첫번째 대결자가 a,b이면 첫번째 대결자가 무조건 이긴다.
                if(vs1==a || vs1==b)
                    q.add(vs1);
                //그렇지 않으면 두번째 대결자가 이긴 것으로 처리함.
                else
                    q.add(vs2);
            }
            
            if(vs1==a && vs2==b){ //a,b가 붙게 되면 대결 종료.
                break;
            }
        }

        return answer;
    }
}

'Algorithms(CT)' 카테고리의 다른 글

[프로그래머스][Java] Lv.3 아이템 줍기  (0) 2023.06.14
[프로그래머스][Java] Lv.2 점프와 순간이동  (0) 2023.06.13
[프로그래머스][Java] Lv.3 여행경로  (0) 2023.06.12
[프로그래머스][Java] Lv.3 단어 변환  (0) 2023.06.11
[프로그래머스][Java] Lv.2 영어 끝말잇기  (0) 2023.06.10
'Algorithms(CT)' 카테고리의 다른 글
  • [프로그래머스][Java] Lv.3 아이템 줍기
  • [프로그래머스][Java] Lv.2 점프와 순간이동
  • [프로그래머스][Java] Lv.3 여행경로
  • [프로그래머스][Java] Lv.3 단어 변환
gwee_99
gwee_99
bE bETTER!
  • gwee_99
    얼렁이와 뚱땅이
    gwee_99
  • 전체
    오늘
    어제
    • ====Category====
      • Algorithms(CT)
        • Programmers
        • Baekjoon
        • Goorm
      • Web
        • Error 해결
      • BackEnd
        • Spring
        • JPA
      • FrontEnd
        • HTML.CSS
        • JavaScript
      • Language
        • Java
      • Cloud
      • CSTS
      • Books
        • IT 5분 잡학사전
      • 일상
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    DP
    LV.3
    프로그래머스
    그리디
    노마드코더
    BOJ
    Lv.1
    lv.4
    자바
    제대로 파는 자바스크립트
    IT 5분 잡학사전
    java
    스택
    Greedy
    Til
    lv2
    DFS
    구름톤 챌린지
    구름
    HTML
    백준
    코딩테스트
    따라하며 배우는 html css
    인프런
    존안님
    개발자북클럽
    IT 잡학사전
    LV.2
    BFS
    호텔 대실
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gwee_99
[프로그래머스][Java] Lv.2 예상 대진표
상단으로

티스토리툴바