백준 1837번 문제 바로가기

간만에 풀어보기로 한 몸풀기 문제! 그런데 너무 오랜만에 코딩했더니 감이 다 떨어졌다ㅜㅜㅋㅋ 4트만에 성공했다. 허허 다음학기 파이썬 강의 하나 듣는데, 꾸준히 풀어가는 습관 들여야겠90000

KEY IDEA

조건 처리에 대한 센스가 돋보이는 문제였다. 특히 pq 전체를 다 돌지 않고, k까지만 돌린다는게 핵심! 나머지 경우에 대해서는 “GOOD” 판정만 내리면 되니까 굳이 소수를 찾이 않아도 된다. (=탐색 시간을 아낄 수 있다.)

Solution

일단 모두 탐색하는 방법을 사용해서 통과할 수 있는지 확인해보았다. Python 같은 경우 big integer에 대해서 걱정할 필요도 없어서 C++과 달리 mod 함수를 따로 만들 필요는 없다.

추가적인 팁은 for break else 구문을 활용하는 것! python에서 매우 유용한 방법인데, for문 바깥에 있는 else문은 break이 실행되지 않은 경우에만 실행된다. 따라서 k까지의 숫자만 체크하고 나머지는 “GOOD” 판정을 쉽게 할 수 있다.

Python

pq, k = map(int, input().split())

for i in range(2, k):
    if pq%i == 0:
        if i >= k:
            print("GOOD")
        else:
            print("BAD", str(i))
        break
else:
    print("GOOD")