level0_주사위 게임1

2024. 12. 4. 21:52파이썬_알고리즘(코딩테스트)/level0

내가 제출한 코드

def solution(a, b):
    answer = 0
    if a % 2 ==1 and b % 2 ==1:
        answer += (a**2 + b**2)
    elif a % 2 == 1 or b % 2 ==1:
        answer += 2*(a+b)
    else:
        answer += abs(a - b)
    return answer
  • 조건1: 두 수가 모두 홀수인 경우 (a % 2 == 1 and b % 2 == 1)
    • 두 수의 제곱을 더한 값(a**2 + b**2)을 answer에 더한다.
  • 조건2: 두 수 중 하나만 홀수인 경우 (a % 2 == 1 or b % 2 == 1)
    • 두 수의 합에 2를 곱한 값(2 * (a + b))을 answer에 더한다.
  • 조건 3: 두 수 모두 짝수인 경우 (위 조건을 모두 만족하지 않을 때)
    • 두 수의 차의 절댓값(abs(a - b))을 answer에 더한다.
  • 최종적으로 계산된 answer 값을 반환한다.

다른 사람이 제출한 코드

def solution(a,b):
    return a*a+b*b if a & b & 1 else (a+b) << 1  if (a | b) & 1 else abs(a - b)

 

이 함수는 삼항 연산자와 비트 연산자를 사용하여 입력된 a와 b의 값을 계산한다.

  • 첫 번째 조건: a & b & 1
    • a & b & 1은 비트 연산자로, a와 b의 가장 낮은 비트(1의 자리)가 모두 1인지 확인한다.
      • 즉, a와 b가 둘 다 홀수일 때 조건이 참
    • 이 조건이 참이면 a * a + b * b를 반환한다.
  • 두 번째 조건: (a | b) & 1
    • 첫 번째 조건이 거짓이면, 두 번째 조건 (a | b) & 1이 평가된다.
    • a | b는 a와 b 중 하나라도 홀수라면 참
    • 이 조건이 참이면 (a + b) << 1을 반환
      • (a + b) << 1은 (a + b) * 2와 동일
      • 비트 연산자 <<는 값을 왼쪽으로 1비트 이동시켜 2배로 만든다.
  • abs(a - b)
    • 위 조건이 모두 거짓이면, 두 수의 차의 절댓값 abs(a - b)를 반환

 

비트 연산자 &란?
- &는 두 숫자의 이진수 표현을 비교하여, 두 숫자의 각 자리 비트가 모두 1인 경우에만 1을 결과로 반환한다.
- 나머지 경우에는 0이 반환