본문 바로가기

Coding Tests/백준 온라인

(PYTHON) 백준 25494

<문제>

 

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