예상 대진표 - Python

2023. 10. 18. 20:26공부/📝 프로그래머스

1. 풀이 코드

def solution(n, a, b):
    a = f"{a - 1:020b}"
    b = f"{b - 1:020b}"
    answer = 20
    for i, j in zip(a, b):
        if i == j:
            answer -= 1
        else:
            break
    return answer


# Test Cases
print(solution(8, 4, 7) == 3)
print(solution(8, 4, 8) == 3)

  위와 같이 풀었습니다. 수학적 원리는 아래와 같습니다.

 

1번 이미지: indexing

  특징을 잡아내기 위해 -1 프로세싱을 했습니다.

 

2번 이미지: 공통점 발견

  이런 상태에서 2로 나누면 몫이 일정하게 나옴을 확인할 수 있습니다.

 

3번 이미지: 이 경우 다음 라운드 진행에서 똑같은 과정을 거칠 수 있습니다.

  다시 똑같은 과정이 진행되기에 반복문으로 진행할 수 있습니다. 이럴 때에 2로 나눈 다는 것은 비트시프트를 하는 과정과 같으므로 사실상 두 수를 2비트로 표현했을 때 1의 자리부터 시작하여 다른 부분을 모두 제외한 자릿수입니다.

 

2. 다른 사람 풀이 코드

def solution(n,a,b):
    return ((a-1)^(b-1)).bit_length()

  .bit_length()에 대해 처음 알았습니다. 이것을 미리 알았다면 번거로운 과정이 필요없었겠군요.

 


 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

Flowchart Maker & Online Diagram Software

Flowchart Maker and Online Diagram Software draw.io is free online diagram software. You can use it as a flowchart maker, network diagram software, to create UML online, as an ER diagram tool, to design database schema, to build BPMN online, as a circuit d

app.diagrams.net

예상 대진표 - Python.drawio
0.01MB

'공부 > 📝 프로그래머스' 카테고리의 다른 글

추억 점수 - Python  (0) 2023.11.17
콜라 문제 - Python  (0) 2023.10.21
점프와 순간 이동 - Python  (0) 2023.10.17
푸드 파이트 대회 - Python  (0) 2023.10.17
K번째수 - Python  (0) 2023.10.17