본문 바로가기

프로그래머스 퀴즈(Python)/level 2

23.02.13 파이썬 코딩 퀴즈#153 숫자 카드 나누기 (프로그래머스 스쿨)

이번 문제는 숫자 카드 나누기 문제이다.

정해진 두 조건 중 하나를 만족하는 가장 큰 양의 정수 a의 값을 구해야 한다.

조건1 

철수가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고, 영희가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a

조건 2

영희가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고, 철수가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양으 정수 a

조건 1을 만족하려면 철수가 가진 모든 카드들의 공약수 중에 영희가 가진 카드들의 공약수에 해당하지 않는 최대 공약수가 필요하고, 조건 2는 그 반대의 조건이 필요하다. 

만약 조건을 만족하는 양의 정수 a가 없다면 0을 return 해주어야 한다.

문제의 제한사항이 있으며, 중복된 원소가 존재할 수 있다. 또한 정수 1 은 양의 정수 a가 될 수 없다. 그 이유는 1은 모든 수의 약수로 존재하기 때문이다.

첫번째 작성한 함수는 위와 같다.

먼저 최대공약수를 찾는 함수 gcd()를 선언해주고, 배열의 가장 작은 값을 기준으로 배열의 모든 요소들을 확인한다.

그리고 큰 값에서 탐색을 시작하기 때문에, 값을 찾는 수간의 i 를 반환하고 종료한다.

이렇게 찾은 값을 각각 arrayA와 arrayB에 적용시켜 나누어 떨어지는지 확인하고, 만약 나누어 떨어지면 찾은 최대공약수를 다시 0으로 변환한 뒤 종료한다.

그리고 최종적으로 두 값이 같은 경우라면, A를 아니라면 두 값중 큰 값을 반환하게 해주었다.

44.4 점이다... 아 죽을 사자가 3개나 있다. 이유는 시간 초과 이다.

효율성을 올리기 위해 math 라이브러리를 사용하였다.

거짓말처럼 시간이 단축 되었고, 이래서 파이선을 사용하는구나... 이래서 라이브러리를 쓰는구나 라고 다시한번 느끼는 문제였다.