Data Structure TIL 09

Nabang Kim·2021년 8월 25일
0

Data Structure

목록 보기
9/9
post-thumbnail

2021년 8월 25일에 작성된 문서 2번 입니다.
자료 구조 배운 내용을 정리했습니다.


Algorithm with Math - GCD / LCM

  • 약수: 어떤 수를 나누어떨어지게 하는 수
  • 배수: 어떤 수의 1, 2, 3, ...n 배하여 얻는 수
  • 공약수: 둘 이상의 수의 공통인 약수
  • 공배수: 둘 이상의 수의 공통인 배수
  • 최대 공약수(GCD. Greatest Common Divisor): 둘 이상의 공약수 중에서 최대인 수
  • 최소 공배수(LCM. Least Common Multiple): 둘 이상의 공배수 중에서 최소인 수



문제: Mask States

방역용 마스크를 제작/판매하는 Mask States 사는 이례적인 전염성 독감 예방을 위해 기존 가격을 유지하며 약속된 물량의 방역용 마스크를 제공하고 있습니다. 이 회사는 사장을 포함하여 A, B, C 세 명뿐이고, 이들 모두 마스크를 제작합니다. 각각의 제작 속도는 다음과 같습니다. A는 55분마다 9개를, B는 70분마다 15개를, C는 85분마다 25개의 방역용 마스크를 만들 수 있습니다. 이 회사의 사람들은 05:00 시부터 동시에 마스크를 만들기 시작하여 각 55분, 70분, 85분 동안 연속으로 마스크를 제작한 후, 5분씩 휴식을 취합니다. 이들 세 명이 처음으로 동시에 쉬는 시점이 퇴근 시간이라면, 이날 하루에 제작한 마스크는 모두 몇 개인가요? (휴식시간과 퇴근시간이 겹치는 경우, 휴식을 취한 뒤 퇴근합니다.)

이 문제에서 최소공배수를 떠올리면, 쉽고 빠르게 문제를 해결할 수 있다.

  • A, B, C의 작업 시간과 쉬는 시간 5분을 더하면 A, B, C는 각각 60분, 75분, 90분마다 마스크를 만든다.
  • 세 명이 동시에 휴식을 취하는 시점은 세 명이 쉬고 난 직후가 같을 시점이다.
  • 쉬고 난 직후가 처음으로 같을 시점을 구해야 하므로 공배수와 최소 공배수의 개념을 이용해야한다,

결과적으로, LCM(60, 75, 90)은 900

  • A는 B, C와 휴식을 취한 직후가 처음으로 같을 시점까지 900/60 = 15 번 작업하고, 15번 X 9개 = 135개의 마스크를 만든다.
  • B는 900/75 = 12번의 작업을 반복하고 12턴 X 15개 = 180개.
  • C는 900/90 = 10번의 작업을 반복하고 10턴 X 25개 = 250개의 마스크를 만든다.

따라서, A, B, C가 하루에 제작한 마스크의 총 개수는 135개 + 180개 + 250개 = 565개다.



문제: 조명 설치

코드스테이츠 라운지에 있는 가로 24cm, 세로 12cm인 직사각형 모양 조형물의 가장자리에 조명을 설치하려고 합니다. 네 모퉁이에는 조명을 반드시 설치해야하고, 나머지 조명은 일정한 간격으로 설치하려고 할 때, 필요한 최소한의 조명 개수는 몇 개일까요? 이때, 꼭지점을 제외한 직사각형의 모든 변에는 최소 하나 이상의 조명이 반드시 설치되어야 합니다. (단, 설치한 조명의 간격은 정수로 이루어진 cm 단위입니다.)

이 문제의 정답은 12개다.

네 모퉁이에 조명을 설치하고, 나머지는 일정한 간격으로 조명을 설치하는 문제 예시

  • 모든 조명을 일정한 간격으로 설치해야 하므로, 가로변과 세로변의 공약수를 구해야한다.
    가로와 세로 각각 나누어 떨어지는 수들을 나열한 뒤, 공통된 수만 모으면 공약수를 구할 수 있다.
    공약수를 기준으로 조명을 설치하면, 일정한 간격으로 나누어 조명을 설치할 수 있다.
  • 최소로 필요한 조명의 개수를 파악해야 하기 때문에 최대 공약수가 필요하다.

GCD(12, 24)는 12

  • 네 모퉁이는 반드시 설치해야 하므로 각 변의 길이를 최대 공약수 12로 나누어 최소로 필요한 조명의 개수를 구할 수 있다.
  • (12/12 + 24/12) X 2 = 3 X 2 = 6개

이 문제에서는 꼭지점을 제외한 직사각형의 모든 변에, 최소 하나 이상의 조명이 설치되어야 하므로 12를 제외한 최대 공약수로 문제를 해결해야 합니다.

  • (12/6 + 24/6) X 2 = 6 X 2 = 12개






Written with StackEdit.

0개의 댓글