참가자 a, b의 번호를 2로 나눠가며 두 참가자가 만날때까지 라운드 수를 증가하여 최종 라운드 수 출력
알고리즘: Brute Force
import sys
n, a, b = map(int, sys.stdin.readline().split())
ret = 1
if a > b: # 만약 a가 b보다 크다면 바꾸기
tmp = a
a = b
b = tmp
while a // 2 + 1 != b // 2 or b - a > 1: # a를 2로 나눈 몫 + 1과 b를 2로 나눈 몫이 같지 않거나, b - a가 1보다 클 때까지 반복 = (a = 1, b = 2)가 될 때까지 반복하는 것
if a % 2 == 0: # 나머지가 0이면
a = a // 2 # 몫 저장
else: # 나머지가 0이 아니면
a = a // 2 + 1 # 몫 + 1 저장
if b % 2 == 0:
b = b // 2
else:
b = b // 2 + 1
ret += 1
print(ret)
이번 문제는 그렇게 어려운 문제는 아니었다
문제 자체에서 몇가지 조건을 제약 조건처럼 주는데 사실 별로 고려하지 않아도 되는 조건들이 많았다
나처럼 a와 b의 크기가 중요하게 코드를 짤 경우에는 a가 b보다 큰 경우를 따로 고려해주어야 한다
문제를 풀긴 풀었지만 너무 하드코딩 너낌이 나서 다른 방법을 찾다가 아래와 같은 코드를 찾았는데,
이런 코드가 훨씬 깔끔한 것 같다
잘하자!
import sys
N, Kim, Im = map(int, sys.stdin.readline().split())
count = 0
while Kim != Im: # 두 참가자의 숫자가 같지 않고 = (kim = 1, im = 1)이 될 때까지 반복하는 것
Kim -= Kim // 2
Im -= Im // 2
count += 1
print(count)
각 참가자의 첫 번호부터 시작하여 2로 나눈 몫을 빼줌에 따라,
내 코드에서 a % 2 == 0 인 걸 확인하는 조건이 필요없어졌다!
나는 + 1을 해주어야 하는 경우가 있어서 분기를 나누어야 했는데, 저렇게 몫을 빼니까 그런 분기가 필요없어졌다! 쩝.
이번 문제는 별로 어려운게 없었지만 더 깔끔하게 코드를 짤 수 있도록 생각해야 할 것 같다
집중!!!! 👁🥄👁