less than 1 minute read

135807. 숫자 카드 나누기 / c++ / level2 / 13분

문제 및 코드 (링크)

image

접근 방식

완전 탐색

  1. arrayA의 원소들의 최대공약수가 arrayB의 모든 원소를 나눌 수 없다면 (나머지가 0이 아니라면) 그 수를 A라고 하고
  2. 반대로 arrayB의 원소들의 최대공약수가 arrayA의 모든 원소를 나눌 수 없다면, 그 수를 B라고 했을 때, A와 B 중 큰 수를 반환하는 문제
  3. 재귀로 arrayA의 최대 공약수를 구한다.
  4. arrayB의 모든 원소에 대해 arrayA의 최대 공약수가 나눠지는 지 확인
  5. 나눠진다면 answer는 (1번에 해당하는 수가 없으므로) 0, 나눠지지 않는다면 answer를 arrayA의 최대공약수로 설정
  6. 3번 4번 로직을 arrayB에 대해서도 수행
  7. 마지막에 answer와 arrayB의 최대공약수 중 큰 수를 answer로 설정 (둘 중 하나라도 0인 수가 있다면 그 수는 무시됨, 둘 다 0이라면 0, 둘 다 0이 아니라면 둘 중 큰 수가 answer가 됨)
  8. ansewr를 반환
  9. 해결

생각해 볼 점

  1. arrayA에 대한 최대공약수 체크 (접근 방식의 3번에서 5번)까지만 해놓고 문제가 안풀려서 조건을 한참 찾았다.
  2. 다시금 문제를 잘 읽어야겠다는 생각이 들었다.
  3. 회사를 퇴근하고 문제를 풀려니 생각보다 힘들지만, 그래도 꾸준히 해야겠다.

해시태그

#99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #TIL