이 영역을 누르면 첫 페이지로 이동
포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

페이지 맨 위로 올라가기

포렌식 & 개발 이야기 - Forensics & Development

Pental - Forensics / iOS / Windows / Android / Kakaotalk / Telegram / Etc

프로그래머스 - [Level 2] 숫자 카드 나누기 (파이썬)

  • 2025.04.02 23:22
  • Programming/프로그래머스
글 작성자: pental

https://school.programmers.co.kr/learn/courses/30/lessons/135807

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

풀이

두 배열이 주어졌을 떄, 한 배열의 모든 수를 나누면서 다른 배열의 어떤 수로도 나누어지지 않는 수중에서 최대값을 찾는 문제이다.

내가 접근한 방식은 다음과 같다.

두배열 arrayA, arrayB가 주어지고,

  1. x는 arrayA의 모든 원소를 나눌수 있어야한다.
  2. x는 arrayB의 어떤 원소도 나눌 수 없어야한다.
  3. 또는 반대로 x는 arrayB의 모든 원소를 나눌 수 있어야한다.
  4. x는 arrayA의 어떤 원소도 나눌 수 없어야한다.
from math import gcd
from functools import reduce

새로운 모듈을 발견해서 사용해봤다. gcd 모듈은 최대 공약수를 구할때 사용하고, reduce는 처음 써봤는데, 배열 내 모든 요소에 대해 gcd를 적용해서 전체의 최대공약수를 구하기 위해서 사용했다.

def check(a, arr):
    for num in arr:
        if num % a == 0:
            return False
    return True

특정 수 a가 주어졌을때, 배열 arr은 어떤수로도 나누어지지 않으면 True를 반환하고, 나누어졌을 때는 False를 반환함으로써, 조건 2를 만족하는지 검사하는 함수를 하나 생성했다.

def solution(arrayA, arrayB):
    answer = 0
    gcdA = reduce(gcd, arrayA)  # arrayA의 모든 수의 최대공약수
    gcdB = reduce(gcd, arrayB)  # arrayB의 모든 수의 최대공약수

arrayA, arrayB의 각각의 전체 최대 공약수를 구하고, 이 값이 각 배열을 전부 나눌 수 있는 후보 숫자가 된다.

    a = 0
    b = 0

    if check(gcdA, arrayB):
        a = gcdA
    if check(gcdB, arrayA):
        b = gcdB

gcdA가 check가 돌아가 후보 a, gcdB가 check가 돌아가면 후보 b~

그리고 두 후보 중 최댓값을 반환하면 문제 풀이 끝.

코드

from math import gcd
from functools import reduce

def check(a, arr) :
    for num in arr :
        if num % a == 0 :
            return False
    return True

def solution(arrayA, arrayB):
    answer = 0
    gcdA = reduce(gcd, arrayA)
    gcdB = reduce(gcd, arrayB)
    
    a = 0
    b = 0
    
    if check(gcdA, arrayB) :
        a = gcdA
    if check(gcdB, arrayA) :
        b = gcdB
    
    answer = max(a, b)
    return answer
저작자표시 비영리 (새창열림)

'Programming > 프로그래머스' 카테고리의 다른 글

[Level 3] 프로그래머스 - 스티커 모으기(2)  (0) 2025.05.04
프로그래머스 - [Level 2] 전력망을 둘로 나누기 (파이썬)  (1) 2025.04.02
프로그래머스 - 배달 (파이썬)  (0) 2025.03.30
프로그래머스 - 마법의 엘리베이터 (파이썬)  (0) 2025.03.29
프로그래머스 - 택배 상자 꺼내기 (파이썬)  (0) 2025.03.26

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Level 3] 프로그래머스 - 스티커 모으기(2)

    [Level 3] 프로그래머스 - 스티커 모으기(2)

    2025.05.04
  • 프로그래머스 - [Level 2] 전력망을 둘로 나누기 (파이썬)

    프로그래머스 - [Level 2] 전력망을 둘로 나누기 (파이썬)

    2025.04.02
  • 프로그래머스 - 배달 (파이썬)

    프로그래머스 - 배달 (파이썬)

    2025.03.30
  • 프로그래머스 - 마법의 엘리베이터 (파이썬)

    프로그래머스 - 마법의 엘리베이터 (파이썬)

    2025.03.29
다른 글 더 둘러보기

정보

포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

  • 포렌식 & 개발 이야기 - Forensics & Development의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

카테고리

  • Category (445) N
    • Forensics (104)
      • Magnet AXIOM (28)
      • Digital Forensics Informati.. (9)
      • Iphone Forensics (23)
      • DFC (7)
      • 디지털포렌식전문가2급 자격증 (10)
      • FTK ACE 자격증 (7)
    • 이것저것 (7)
      • Ubuntu (6)
      • 디스코드 봇 (4)
      • Volatility GUI (2)
    • CTF (32)
      • NEWSECU (14)
      • CTF-d (5)
      • Puzzel - Network Forensics (2)
      • Security Traps (2)
      • system32.kr (5)
      • HMCTF (4)
    • Programming (254) N
      • C (10)
      • Python (11)
      • 백준 (200) N
      • 프로그래머스 (32)
    • 그냥 개발 및 잡담 (16)
      • Docker (2)
      • Google Cloud (3)
      • OS 개발 (3)
    • Best of Best (20)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 디지털포렌식
  • 프로그래머스
  • 백준
  • axiom
  • Forensics
  • 파이썬
  • 포렌식
  • pental
  • 전체 보기…

정보

pental의 포렌식 & 개발 이야기 - Forensics & Development

포렌식 & 개발 이야기 - Forensics & Development

pental

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © pental.

티스토리툴바