<문제>
https://www.acmicpc.net/problem/25494
25494번: 단순한 문제 (Small)
세 양의 정수 $a$, $b$, $c$가 주어질 때, 다음 조건을 만족하는 정수 쌍 $(x, y, z)$의 개수를 구하시오. $1 \le x \le a$ $1 \le y \le b$ $1 \le z \le c$ $(x\,\bmod\,y) = (y\,\bmod\,z) = (z\,\bmod\,x)$ $(A\,\bmod\,B)$는 $A$를 $B$
www.acmicpc.net
<풀이>
처음에는 나머지의 쌍을 찾는 문제인줄 알고 0,0,0 일 수 있는 경우는 왜 문제에 없지.. 라는 생각을 했었습니다. 그렇지만 문제를 자세히 읽어보니 나머지의 쌍이아니라 나머지가 같은 경우를 포함한 x,y,z의 쌍을 구하는 문제였습니다.
처음에 작성한 코드입니다.
< FAIL >
N = int(input())
for _ in range(N):
a = list(input().split())
a.sort()
print(a[0])
a,b,c를 그냥 리스트 a하나로 받았고, 이 3 값중 가장 작은 값이 조건을 만족하는 수라는 생각을 했었습니다. 그래서 오답판정을 받게 되었죠... 반례로는 x = 1 y = 3 z = 2 일때도 나머지값이 일치할 수있다는 것을 볼 수 있었습니다.
<PASS>
N = int(input())
for _ in range(N):
count = 0
a,b,c = map(int,input().split())
x = [i for i in range(1,a+1)]
y = [j for j in range(1,b+1)]
z = [v for v in range(1,c+1)]
for i in x:
for j in y:
for v in z:
if (i%j) == (j%v) and (j%v) == (v % i):
count+=1
else:
continue
print(count)
그래서 삼중 for문을 이용해 modular연산의 결과를 문제의 조건에 맞게 if else로 판별할 수 있도록 코드를 구현해 보았습니다.
N = int(input())
for _ in range(N):
count = 0
a,b,c = map(int,input().split())
x = range(1,a+1)
y = range(1,b+1)
z = range(1,c+1)
for i in x:
for j in y:
for v in z:
if (i%j) == (j%v) and (j%v) == (v % i):
count+=1
print(count)
https://dojang.io/mod/page/view.php?id=2192
파이썬 코딩 도장: 8.2 논리 연산자 사용하기
이번에는 논리 연산자를 사용해보겠습니다. 논리 연산자는 and, or, not이 있는데 먼저 and입니다. >>> True and True True >>> True and False False >>> False and True False >>> False and False False >>> and는 두 값이 모두
dojang.io