백준

백준 10430 나머지 파이썬

하카데미 2022. 2. 7. 08:30

1. 문제

  • 세 수가 주어졌을 때 4가지 값 구하기
  • (A+B)%C, ((A%C) + (B%C))%C, (A×B)%C, ((A%C) × (B%C))%C

 

 

2. 출제의도 파악하기

  • 나머지 계산할 줄 아니?

 

 

3. 풀이

  • 1.9 백준 10869 사칙연산에서 남의 버전 분석한 대로 하면 된다.
  • sep = '\n' : 각 출력할 요소를 줄바꿈으로 표현하기 위함이다.
a, b, c = map(int, input().split())
print((a + b)%c, ((a%c) + (b%c))%c, (a * b)%c, ((a%c)*(b%c))%c, sep='\n')
  • 수학에서 곱셈은 분배 법칙이 적용되는데, 2번째 식과 마지막 식에서 공통된 부분을 뽑아 작성해보았다.
a, b, c = map(int, input().split())
print((a + b)%c, ((a+b)%c)%c, (a * b)%c, ((a*b)%c)%c, sep='\n')

 

 

4. 남의 버전 분석

  • := 바다코끼리 연산자를 이용했음
a,b,c=map(int,input().split())
print(x:=(a+b)%c,x,y:=a*b%c,y)

나는 코랩에서 실행해보고 백준에 제출하고 있다.

이 코드가 코랩에선 실행이 안되어서 검색을 해봤다.

 

:= 는 바다코끼리 연산자라고 한다.

이 쓰임을 알아보자.

# 기존 코드
a = [1, 2, 3]
n = len(a)

if n > 5:
    print(f"List is too long ({n} elements, expected <= 10)")
# := 연산자 사용
a = [1, 2, 3]

if (n := len(a)) > 5:
    print(f"List is too long ({n} elements, expected <= 10)")

두 예제를 살펴보면 변수 n의 선언 방식이 다름을 확인할 수 있다.

그리고 := 연산자를 통해 코드 길이를 줄였다.

조건문 안에서 n을 선언하므로써 코드의 복잡성을 해결했다.

하지만 파이썬 공식 문서에서 이 바다코끼리 연산자에 대해 이렇게 이야기 한다.

 

Try to limit use of the walrus operator
to clean cases

that reduce complexity and improve readability.

복잡성을 줄이고 가독성을 향상시키는 
케이스를 정리하기 위해 
바다코끼리 연산자의 사용을 제한하십시오.

쓰라는 건지, 말라는 건지..

아무튼 조금 덜 귀찮을 수 있다는 의미인 것 같다.

 

 

5. 출력 확인

 

 

6. 기타

코랩에서 이 := 바다코끼리 연산자가 실행되지 않았던 것은 코랩의 파이썬 버전이 3.7.x 였기 때문이다.

파이썬 3.8 이상의 버전에서는 := 잘 실행된다.

'백준' 카테고리의 다른 글

백준 1330 두 수 비교하기 파이썬  (0) 2022.02.09
백준 2588 곱셈  (0) 2022.02.08
백준 10869 사칙연산 파이썬  (0) 2022.02.06
백준 1008 A / B 파이썬  (0) 2022.02.05
백준 10998 A × B 파이썬  (0) 2022.02.04