반응형

해설을 시작하기 전에 여담으로 최근 10개 정도의 게시물이 백준과 관련된 포스팅이였는데, 10개 게시물을 통한 내 블로그의 방문자 수는 한 명이였다. 방문자 수에 너무 연연해 하지 말자...........................................................

 

 


 

이번에 푼 문제는 무려 실버5등급의 [백준 2609번 최대공약수와 최소공배수]이다. 

(실버 문제를 풀 때마다 게임 승급한 것 같다. 롤을 안해서 잘 모르지만 이런 기분인가)

 

a, b = map(int, input().split())
key, x, y = 1, 1, 1
min = a if a < b else b
for i in range(1, min+1):
    if a % i == 0 and b % i == 0:
        key = i
        x = a / i
        y = b / i
print(key)
print(int(x * y * key))

먼저 두 번 틀렸는데, 틀린 이유는 여러 반례들을 확인하지 못해서였다.

 

이거는 문제 풀어도 반례 때문에 다 틀리게 생겼다... 반례 못 찾으면 문제를 못 푼거지만,,

 

먼저 첫 번 째로 틀린 이유는 key, x, y를 1로 초기화 해주지 않아서 였다. 이들을 1로 초기화 해주지 않는다면 제일 작은 자연수인 1을 입력 받을 때 초기화가 안됐다는 메세지를 띄우며 오류가 나버린다.

 

두 번째로 틀린 이유는 for문을 min까지 받아버려서다. min까지 받으면 min값은 받지 않으므로 min+1까지 for문을 돌려서 꼭 min값도 확인해 봐야 한다. 그 반례는 a와 b가 각각 3일 때 생긴다. 만약 "3 3"을 입력했다면, for문을 min까지 돌려서 최대공약수 1, 최소공배수 9라는 오답을 낸다. 그런다 for문을 min+1까지 돌린다면 3까지 확인을 해주기 때문에 정답인 3과 1을 출력한다.

 


*삼항연산자

C에서는 min = a < b ? a : b;와 같이 삼항연산자를 이용할 수 있었다. 파이썬에서 C와 C++, JAVA의 많은 좋은 부분들을 가져왔지만 이 부분은 안가져왔다. 그래서 조금 실망하던 찰나에 파이썬은 기대를 져버리지 않고 위 언어들보다 더 좋은 방법을 제시하였다.

 

min = a if a < b else b

 

바로 이 방법이다. a<b라면 a이고, 아니면 b라는 것이다. 그와 동시에 min에 저장하는 것으로 위에서 C의 예제와 같은 값을 출력해낼 것이다.(사실 직접해보지는 않았음, 여러분들이 해보시길 ㅋ)

 

아무튼 파이썬이 C보다는 훨씬 편하다.

 

 

반응형

+ Recent posts