백준 30890번 : 드럼 

Python을 이용한 30890번 :연산자 끼워넣기에 대해서 포스팅하겠습니다.

14888

30890번 문제설명

  • 왼손과 오른손이 서로 다른 박자로 드럼을 연주하는 경우가 있다. 한 박자 동안 왼손이 X번, 오른손이 Y번 연주를 해야 한다면 왼손은 (1/X)박자마다, 오른손은 (1/Y)박자마다 연주한다.

접근방법

1. 최소공배수를 통한 박자

  • 왼손이 한 박자를 1/2 박으로 나눠서 치고, 오른손이 한 박자를 1/3 박으로 나눠서 친다고 하였을 때 두 손이 동시에 박자를 맞추는 지점은 두 박자의 최소공배수에 해당합니다.
  • 따라서 두 손은 최소공배수의 카운트아래에서 자신의 박자에 맞는 차례에 드럼을 치게 됩니다.

2. 조건문을 통한 박자 판별

  • 코드에서는 반복문과 조건문을 사용하여 각 박자마다 어떤 손으로 연주해야 하는지 결정합니다.
  • if not(i%b) and not(i%a) 조건은 두 손이 동시에 연주해야 하는 경우를 판별합니다. 이 경우 ‘3’을 결과에 추가합니다.
  • elif not(i%a) 조건은 왼손만 연주해야 하는 경우(오른손 연주 시점이 아님)를 판별합니다. 이 경우 ‘2’를 결과에 추가합니다.
  • elif not(i%b) 조건은 오른손만 연주해야 하는 경우를 판별합니다. 이 경우 ‘1’을 결과에 추가합니다.

30890번 코드

Python
a,b = map(int,input().split())  # X와 Y 값을 입력받음
result = []  # 연주 순서를 저장할 리스트
for i in range(1,a*b+1) :  # 1부터 a와 b의 최소공배수까지 반복
    if not(i%b) and not(i%a) :  # i가 a와 b 모두의 배수인 경우 (양손으로 연주)
        result.append(3)
    elif not(i%a) :  # i가 a의 배수인 경우 (오른손으로 연주)
        result.append(2)
    elif not(i%b) :  # i가 b의 배수인 경우 (왼손으로 연주)
        result.append(1)    

print("".join(map(str,result)))  # 연주 순서를 문자열로 변환하여 출력

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to Top