Hyunseok
현재 사이트는 2024년 11월 이후로 업데이트 되지 않습니다. 새 글은 블로그로 확인해주세요. 블로그로 이동
프로그래밍/파이썬 [파이썬] 21919 소수 최소 공배수 풀어보자
2022. 5. 22. 13:47

현재 사이트는 2024년 11월 이후로 업데이트 되지 않습니다. 새 글은 블로그로 확인해주세요. 블로그로 이동

 

문제는 어렵지 않다

 

다만 구현하는 게 어색해서 힘들었다 

 

최근에 JS만 하다 보니.. 함수 만들어 쓰는 게 더 편해져서 

 

냅다 함수 없이 적으니 계속 오류가 났다..

 

그리고 함수 만들어서 푸니 한방에 풀렸다..

 

 

 

 

우리가 가져야 할 목표는 두 개 정도 있다 

 

1. 수열에 들어온 100만 이하의 수가 소수인지

2. 그 값이 소수면 그 값들을 모아 최소공배수를 구한다

 

자, 그럼 일단 소수인가부터 생각해보자 

 

100만.. 이하가 아니더라도 에스 뭐인가 체를 쓰는 것이 문제를 푸는데 큰 도움이 된다

 

십중팔구 이놈의 소수 구하기는 일단 큰 수를 주기 때문이다..

 

그래서 에스뭐시기체의 이론을 이용해.. 구하려는 값의 제곱근수 까지만 수를 검사한다 

 

이유는 다음 그림을 보면 쉽게 이해할 수 있다

 

https://ko.wikipedia.org/wiki/에라토스테네스의_체

 

파이썬 제곱근은.. math를 쓸 수도 있으나 

 

귀찮으니 그냥 **0.5로 처리해주자 그리고 소수점을 나누라 하면 또 오류 날 수 있으니

 

int를 씌워 소수점을 삭제하고 +1을 해주자 

 

그리고 개인적인 습관으로 소수 문제 풀 때는 2, 3, 5, 7은 냅다 소수로 넘겨서 푸는 걸 좋아한다 

 

모르겠다 그냥 이게 보기 편하다 수 세는 게 더 편해지는 느낌이라 이렇게 넣는다.. (안넣어도 문제푸는데는 상관없다)

 

그러고 나서 num으로 받은 숫자를 2부터 시작하여 나머지를 구한다 

 

0이면 False리턴

 

0이 없었다면 for문을 다 돌고 True 리턴

 

그럼 함수는 넘겨받은 값의 결과를 불리언으로 넘겨준다.. 이제 전체 코드를 보자 

 

 

(2, 3, 5, 7은 지워주고 ..)

 

소수 문제를 풀 정도면 sys는 다들 알 것이고..

 

input() 하나만 딸랑 둔 것은

 

어차피 ary를 set으로 받아

 

for로 바로 돌리기 때문에 필요가 없기 때문

 

그리고 ary를 for문을 돌려준다 

 

그리고 for값을 sosuni에 넣어 참 거짓을 판단한 뒤

 

참이면 sosu에 k를 그대로 곱해준다

 

그리고 마지막sosu를 출력하는데

 

조건은 sosu가 1이 아닌 경우 sosu, 만약 1인 경우에는 -1을 출력하라는 문을 걸어준다 

 

 

그리고 코드의 공백들을 더 줄여서 빅 -숏코딩 빌런을 해보았다..

 

202b짜리 코드를 보긴 했는데 저건 파이썬 교수 아니면 못할 것 같다

 

---

 

근 2달 동안 브론즈 문제만 푼다고 문제 푸는 맛을 잊어버리고 있었는데 

 

오늘 그래도 약간 긴 코드의 문제를 푸니 기분이 매우 좋았다 

 

이 맛을 잊고 있었다니.. 흑흑.. 앞으로 시간 나면 하나씩 풀어봐야겠다

 


프로그래밍/파이썬의 다른 글