[프로그래머스][Level2][Java] 예상대진표

2022. 6. 11. 14:35·프로그래머스/Level 2

문제

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

 

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

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

programmers.co.kr

 

풀이코드

public int solution(int n, int a, int b) {      //예상대진표
    int answer = 0;                 // 라운드 수
    boolean loop = true;            // 반복문을 컨트롤할 변수 생성
    while (loop) {
        answer++;                   // 반복문이 진행되면 라운드 수를 증가시킴
        if (a % 2 == 0) {           // a가 짝수일때, 그 다음 라운드로 올라갈 시, 가지는 숫자
            a = a / 2;
        } else if (a % 2 == 1) {    // a가 홀수일때, 가지는 숫자
            a = a / 2 + 1;
        }
        if (b % 2 == 0) {           // b가 짝수일때, 가지는 숫자
            b = b / 2;
        } else if (b % 2 == 1) {    // b가 홀수일때, 가지는 숫자
            b = b / 2 + 1;
        }
        if(a == b){                 // 만약에 a와 b가 같으면 같은 라운드에서 붙은 것이므로 반복문 종료
            loop = false;
        }
    }

    return answer;
}

이 문제는 생각보다 간단하다 예를 들어, 1번과 2번이 붙어서 어느쪽이 이겨도 다음 라운드에 올라가면 1번이 된다.

5번과 6번일 경우는 3번이 된다. 즉 홀수일때는 /2를 한뒤, +1을 하면 되었고 짝수일때는 /2를 하면 다음 라운드의 숫자가 되었다. 그리고 다음 라운드의 숫자가 같다는 것은 그 전 라운드에서 만났다는 것이므로 그때 반복문을 종료하면 된다.

원래는 이렇게 풀었으나 생각해보면 홀수, 짝수 나눌 것 없이

a = a / 2 + a % 2;
b = b / 2 + b % 2;

그냥 이렇게 적어버리면 홀수, 짝수를 나눌 것 없이 한번에 풀 수 있어서 이것을 적용하면

public int solution(int n, int a, int b) {      //예상대진표
    int answer = 0;                 // 라운드 수
    boolean loop = true;            // 반복문을 컨트롤할 변수 생성
    while (loop) {
        answer++;                   // 반복문이 진행되면 라운드 수를 증가시킴
        a = a / 2 + a % 2;	    // a에 다음 라운드 때 받을 숫자를 넣음
	b = b / 2 + b % 2;	    // b에 다음 라운드 때 받을 숫자를 넣음
        if(a == b){                 // 만약에 a와 b가 같으면 같은 라운드에서 붙은 것이므로 반복문 종료
            loop = false;
        }
    }

이렇게 비교적 간단하게 나타낼 수 있게 된다.

저작자표시 비영리 (새창열림)

'프로그래머스 > Level 2' 카테고리의 다른 글

[프로그래머스][Level2][Java] 멀리 뛰기  (0) 2022.06.14
[프로그래머스][Level2][Java] 구명보트  (0) 2022.06.11
[프로그래머스][Level2][Java] 전화번호 목록  (0) 2022.06.11
[프로그래머스][Level2][Java] 2xn 타일링  (0) 2022.06.04
[프로그래머스][Level2][Java] 모음사전  (0) 2022.05.22
'프로그래머스/Level 2' 카테고리의 다른 글
  • [프로그래머스][Level2][Java] 멀리 뛰기
  • [프로그래머스][Level2][Java] 구명보트
  • [프로그래머스][Level2][Java] 전화번호 목록
  • [프로그래머스][Level2][Java] 2xn 타일링
BvrPark
BvrPark
코드 퍼즐과 개발 일상
  • BvrPark
    비버의 개발 일지
    BvrPark
  • 전체
    오늘
    어제
    • 분류 전체보기 (121)
      • JAVA (7)
        • 메서드 외울 것 (2)
      • 프로그래머스 (56)
        • 총 풀이 코드(깃허브) (1)
        • Level 1 (22)
        • Level 2 (33)
      • 백준 알고리즘(단계 별) (16)
        • 총 풀이 코드(깃허브) (1)
        • 1. 입출력과 사칙연산 (2)
        • 2. if 문 (2)
        • 3. for문 (1)
        • 4. while문 (2)
        • 5. 1차원 배열 (3)
        • 6. 함수 (1)
        • 7. 문자열 (1)
        • 8. 기본수학 1 (3)
      • 백준 알고리즘(solved.ac) (9)
        • 총 풀이 코드(깃허브) (1)
        • class2 (8)
      • LeetCode 문제 풀이 (4)
        • 총 풀이 코드(깃허브) (1)
        • Easy (3)
      • 코드업 알고리즘 (7)
      • git과 github사용법 (4)
      • html, css, javaScript (2)
      • 프로젝트 (11)
        • 순수 Java 프로젝트 (2)
        • 쇼핑몰 프로젝트 (2)
        • 게시판 프로젝트 (5)
        • 근태관리 프로젝트 (2)
      • 커피타임 (2)
        • 2023년 (2)
        • 2024년 (0)
  • 블로그 메뉴

    • 링크

      • 포트폴리오
      • 깃허브
    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • Designed By정상우
    BvrPark
    [프로그래머스][Level2][Java] 예상대진표
    상단으로

    티스토리툴바